Leetcode 152. 乘积最大子序列 解题思路及C++实现

解题思路:

求乘积最大的子序列,不同于和最大的子序列,两个负数相乘是会得到正数的,所以在遍历数组nums时,需要存储最大和最小的子序列乘积。然后每遍历一个元素,更新一次。

 

class Solution {
public:
    int maxProduct(vector& nums) {
        if(nums.empty()) return 0;
        int n = nums.size();
        int imax = nums[0];  //存储当前最大值
        int imin = nums[0];  //存储当前最小值
        int res = nums[0];   //存储结果
        for(int i = 1; i < n; i++){
            int tmp = imax;  //要先把imax缓存起来,不然就会被下面的赋值语句更新掉
            imax = max(nums[i], max(nums[i]*imax, nums[i]*imin));
            imin = min(nums[i], min(nums[i]*tmp, nums[i]*imin));
            res = max(res, imax);
        }
        return res;
    }
};

 

 

 

你可能感兴趣的:(Leetcode)