Given an integer array nums
, find the contiguous subarray within an array (containing at least one number) which has the largest product.
Example 1:
Input: [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.
Example 2:
Input: [-2,0,-1] Output: 0 Explanation: The result cannot be 2, because [-2,-1] is not a subarray.
class Solution {
public:int maxProduct(vector<int>& nums) {
int size=nums.size();
int res=nums[0];
vector<int> f(size,0),g(size,0); //其中f[i]表示子数组[0, i]范围内的最大子数组乘积,g[i]表示子数组[0, i]范围内的最小子数组乘积,
f[0]=nums[0];
g[0]=nums[0];
for(int i=1;i<nums.size();++i){
f[i]=max(max(f[i-1]*nums[i],g[i-1]*nums[i]),nums[i]);
g[i]=min(min(f[i-1]*nums[i],g[i-1]*nums[i]),nums[i]);
res=max(res,f[i]);
}
return res;
}
};