QUESTION
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.
思路
这道题和之前求最大连续的和差不多,所不同的是乘积有负数的情况,不能舍弃,有一天负数也会变为最大的,product有乘积的意思。最大连续子串的和的求解方法是,从左到右遍历,把以前的和与现在的元素作对比,把较大的那个存入以前的和。最大连续乘积的不同在于,不光要存最大的积还要存最小的积,上代码最清楚了
代码
public class Solution {
public int maxProduct(int[] nums) {
int maxpre = nums[0];
int minpre = nums[0];
int maxSofar = nums[0];
int maxhere,minhere;
for(int i = 1;i < nums.length;i++){
maxhere = Math.max(Math.max(maxpre * nums[i],minpre * nums[i]),nums[i]);
minhere = Math.min(Math.min(maxpre * nums[i],minpre * nums[i]),nums[i]);//保留一个最小值
maxSofar = Math.max(maxhere,maxSofar);
maxpre = maxhere;
minpre = minhere;
}
return maxSofar;
}
}
结果及分析
时间复杂度为O(n),空间复杂度为O(1);