LeetCode系列152—乘积最大子数组

题意

乘积最大子数组

题解

方法一:动态规划

class Solution {
    
    
public:
    int maxProduct(vector<int>& nums) {
    
    
        vector <int> maxF(nums), minF(nums);
        for (int i = 1; i < nums.size(); ++i) {
    
    
            maxF[i] = max(maxF[i - 1] * nums[i], max(nums[i], minF[i - 1] * nums[i]));
            minF[i] = min(minF[i - 1] * nums[i], min(nums[i], maxF[i - 1] * nums[i]));
        }
        return *max_element(maxF.begin(), maxF.end());
    }
};

滚动数组优化后

class Solution {
    
    
public:
    int maxProduct(vector<int>& nums) {
    
    
        int maxF = nums[0], minF = nums[0], ans = nums[0];
        for (int i = 1; i < nums.size(); ++i) {
    
    
            int mx = maxF, mn = minF;
            maxF = max(mx * nums[i], max(nums[i], mn * nums[i]));
            minF = min(mn * nums[i], min(nums[i], mx * nums[i]));
            ans = max(maxF, ans);
        }
        return ans;
    }
};

参考

乘积最大子数组

Guess you like

Origin blog.csdn.net/younothings/article/details/120212883