乘积最大子组数


给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

 

示例 1:

输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:

输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

 

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

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

int main() {
    vector<int> nums{2, 3, -2, 4};
    Solution s;
    cout << s.maxProduct(nums) << endl;
}

 

posted on 2021-03-04 13:31  QzZq  阅读(122)  评论(0)    收藏  举报

导航