数组的最大乘积子序列

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;
    }
};

猜你喜欢

转载自blog.csdn.net/u010325193/article/details/80371074