题目
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.
算法
dp
O(N)
max[i] = max[i-1] * A[i]
or min[i-1] *A[i]
or A[i]
class Solution {
public:
int maxProduct(vector<int>& nums) {
int n=nums.size();
if(!n)
return 0;
int tmax=nums[0],tmin=nums[0]; //product end with A[i]
int res=tmax;
for(int i=1;i<n;i++)
{
int tmp1=tmax*nums[i],tmp2=tmin*nums[i];
tmax=max(max(tmp1,tmp2),nums[i]);
tmin=min(min(tmp1,tmp2),nums[i]);
res=max(tmax,res);
}
return res;
}
};