【Leetcode】152.乘積最大子陣列

AnUnverse發表於2020-10-22

乘積最大子陣列

題目描述:

給你一個整數陣列 nums ,請你找出陣列中乘積最大的連續子陣列(該子陣列中至少包含一個數字),並返回該子陣列所對應的乘積。

示例 1:

輸入: [2,3,-2,4]
輸出: 6
解釋: 子陣列 [2,3] 有最大乘積 6。
示例 2:

輸入: [-2,0,-1]
輸出: 0
解釋: 結果不能為 2, 因為 [-2,-1] 不是子陣列。

【題解】:

我不太會動態規劃,之前遇到過類似的問題,既有正數也有負數,如何求最大的值,問了身邊的人:同時儲存兩個值,一個最大值,一個最小值。列出狀態轉移方程,每一步記錄從0到當前位置i的最小值與最大值。最後選擇一個最大的值。

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int n = nums.size();
        int a[n + 1][2];
        a[0][0] = a[0][1] = nums[0];
        
        int m = nums[0];
        for (int i = 1; i < n; i ++ )
        {
            a[i][0] = max(nums[i], max(a[i - 1][0] * nums[i], a[i - 1][1] * nums[i]));
            a[i][1] = min(nums[i], min(a[i - 1][0] * nums[i], a[i - 1][1] * nums[i]));
            m = max(max(a[i][0], a[i][1]), m);
        }
        return m;
    }
};

 

相關文章