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
.
思路:当前最大值来源只能是:
1.当前值;
2.以前最大值与当前值的组合(乘积);
3.以前最小值和当前值的组合(乘积);
一言以蔽之:当前最大值和最小值均来自 以前最大值,以前最小是和当前值的组合。
class Solution {
public:
int maxProduct(vector<int>& nums) {
if(nums.size()==0) return 0;
int maxV=nums[0], minV=maxV, len=nums.size(), cur, tmp, ans=maxV;
for(int i=1; i<len; i++) {
cur = nums[i];
tmp = minV*cur;
minV = min(cur, min(tmp, maxV*cur));
maxV = max(cur, max(tmp, maxV*cur));
if(maxV>ans) ans=maxV;
}
return ans;
}
};