题目:
152. Maximum Product Subarray(medium)
解题思路:
因为数组中会存在负数,所以有可能负负得正——最小值乘当前数为最大值。所以要记住当前的最大乘积和最小乘积,不断更新迭代。
代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public int maxProduct(int[] nums) {
if(nums == null || nums.length == 0) return 0;
if(nums.length == 1) return nums[0];
int max = nums[0];
int maxCur = nums[0];
int minCur = nums[0];
int maxTemp,minTemp;
for(int i = 1;i<nums.length;i++){
maxTemp = Math.max(Math.max(maxCur*nums[i],minCur*nums[i]),nums[i]);
minTemp = Math.min(Math.min(maxCur*nums[i],minCur*nums[i]),nums[i]);
max = Math.max(max,maxTemp);
maxCur = maxTemp;
minCur = minTemp;
}
return max;
}