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.
解答:
这个问题解决方案就是
维护一个最大值一个最小值。那么考虑一个新的值时,最大的可能是该值本身,或者是该值乘以最大值,由于可能是负数,那么还可能是最小值乘以该值。最小值同理,如此更新。如果改为
res=min(res,minnum);
那么结果可以取最小值
class Solution {
public:
int maxProduct(vector<int>& nums) {
if(nums.size()==0) return 0;
int res=nums[0],minnum=nums[0],maxnum=nums[0];
for(int i=1;i<nums.size();i++)
{
int tmax=maxnum,tmin=minnum;
maxnum=max(max(nums[i],tmax*nums[i]),tmin*nums[i]);
minnum=min(min(nums[i],tmax*nums[i]),tmin*nums[i]);
res=max(res,maxnum);
}
return res;
}
};