天天看點

【Leetcode 152】 乘積最大子數組

問題描述

給你一個整數數組 

nums

 ,請你找出數組中乘積最大的連續子數組(該子數組中至少包含一個數字)。

輸入: [2,3,-2,4]
輸出: 6
解釋: 子數組 [2,3] 有最大乘積 6。
           
輸入: [-2,0,-1]
輸出: 0
解釋: 結果不能為 2, 因為 [-2,-1] 不是子數組。
           

參考實作

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        
        int length = nums.size();
        if( length == 0 ) return 0;

        int maxi = nums[0], mini = nums[0];
       
        int sum = nums[0];

        for(int i=1; i<length; ++i){
            if(nums[i]<0)
                swap(mini, maxi);

            mini = min(nums[i], mini*nums[i]);
            maxi = max(nums[i], maxi*nums[i]);
            sum = max(sum, maxi);
        }


        return sum;

    }
};