跳转至

152.乘积最大子序列 (Medium)*

题目描述*

给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。

示例*

输入: [2,3,-2,4]

输出: 6

输入: [-2,0,-1]

输出: 0

代码*

因为有负数,所以需要保存当前最小值。

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int len = nums.size();
        if(len == 0) {
            return 0;
        }else if(len == 1) {
            return nums[0];
        }
        int maxium = nums[0], minium = nums[0];
        int res = nums[0];
        for(int i = 1; i < len; i++) {
            int tmp = maxium;
            maxium = max(max(maxium * nums[i], nums[i]), minium * nums[i]);
            minium = min(min(minium * nums[i], nums[i]), tmp * nums[i]);
            res = max(maxium, res);
        }
        return res;
    }
};

最后更新: July 23, 2022