【LeetCode 152】 Maximum Product Subarray

題目描述

Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.

Example 1:

Input: [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.

Example 2:

Input: [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

思路

記錄最小值和最大值。

代碼

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int n = nums.size();
        vector<vector<int> > dp(n, vector<int>(2));
        
        dp[0][0] = nums[0];
        dp[0][1] = nums[0];
        int res = nums[0];
        
        for (int i=1; i<n; ++i) {
            dp[i][0] = min(min(dp[i-1][0]*nums[i], dp[i-1][1]*nums[i]), nums[i]);
            dp[i][1] = max(max(dp[i-1][0]*nums[i], dp[i-1][1]*nums[i]), nums[i]);
            res = max(res, dp[i][1]);
        }
        
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章