赞
踩
给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
测试用例的答案是一个 32-位 整数。
class Solution { public int maxProduct(int[] nums) { int result = Integer.MIN_VALUE; int[] max = new int[nums.length + 1]; int[] min = new int[nums.length + 1]; min[0] = 1; max[0] = 1; for(int i = 1; i <= nums.length; i++) { //情况一:nums[i - 1]为负数,min[i - 1]是负数,min[i - 1] * nums[i - 1]为最大的正数 //情况二:nums[i - 1]为负数,min[i - 1]是正数,nums[i - 1]为最大的正数 //情况三:nums[i - 1]是正数,max[i - 1]是负数,nums[i - 1]为最大的正数 //情况四:nums[i - 1]是正数,max[i - 1]是正数,max[i - 1] * nums[i - 1]为最大的正数 max[i] = Math.max(min[i - 1] * nums[i - 1], Math.max(nums[i - 1], max[i - 1] * nums[i - 1])); min[i] = Math.min(max[i - 1] * nums[i - 1], Math.min(nums[i - 1], min[i - 1] * nums[i - 1])); result = Math.max(result, max[i]); } return result; } }
class Solution {
public int maxProduct(int[] nums) {
int result = Integer.MIN_VALUE;
int max = 1;
int min = 1;
for(int i = 0; i < nums.length; i++) {
int temp = max;
max = Math.max(min * nums[i], Math.max(nums[i], max * nums[i]));
min = Math.min(temp * nums[i], Math.min(nums[i], min * nums[i]));
result = Math.max(result, max);
}
return result;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。