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.
这是一道动态规划的题,状态转移方程为:
Max[i]=max{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
Min[i]=min{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
代码:
class Solution {
public:
int maxProduct(vector<int>& nums) {
if(nums.size()==1)
return nums[0];
int res=nums[0];
int maxr[nums.size()],minr[nums.size()];
maxr[0]=nums[0];
minr[0]=nums[0];
for(int i=1;i<nums.size();i++){
maxr[i] = max(nums[i], max(maxr[i-1] * nums[i], minr[i-1]*nums[i]));
minr[i] = min(nums[i], min(minr[i-1] * nums[i], maxr[i-1]*nums[i]));
res=max(maxr[i],res);
}
return res;
}
};