題目描述:
給定乙個整數陣列 nums ,找出乙個序列中乘積最大的連續子串行(該序列至少包含乙個數)。
示例 1:
輸入: [2,3,-2,4]
輸出: 6
解釋: 子陣列 [2,3] 有最大乘積 6。
示例 2:
輸入: [-2,0,-1]
輸出: 0
解釋: 結果不能為 2, 因為 [-2,-1] 不是子陣列。
該題目求最大子串行的乘積,參考leetcode-52 最大子序和中的暴力解法,窮舉所有元素的可能性:
int
maxsubarray
(vector<
int>
& nums)
return res;
}int
_maxsubarray
(vector<
int>
&nums,
int index)
int pre =
_maxsubarray
(nums, index -1)
;int res =
max(nums[index]
* pre, nums[index]);
return res;
}
但是和的形態和積的形態還是有差異的,針對-2 2 -3的數列,以上方法求的最大乘積為2,但是實際上是12
乘積存在 之前的最小值(負數)再乘上當前的乙個負數,就有可能變為最大值。
所以針對乘積的最大子串行,使用動態規劃的方式,且狀態轉移方程需要維護兩種狀態,一種最大值,一種最小值:
實現如下:
int
maxproduct
(vector<
int>
& nums)
return res;
}
Leetcode 152 乘積最大子串行
原題描述 找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 例如,給定序列 2,3,2,4 其中乘積最大的子串行為 2,3 其乘積為6。解答 1.暴力搜尋 o n 2 沒有ac 超時 class solution return max 2.動態規劃思想,max min 每有乙個新的數字加入,...
Leetcode 152 乘積最大子串行
給定乙個整數陣列nums,找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0解釋 結果不能為 2,因為 2,1 不是子陣列。這裡用動態規化的方法,即dp i 為以i結尾乘積最大連...
leetcode152 乘積最大子串行
給定乙個整數陣列 nums 找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0 解釋 結果不能為 2,因為 2,1 不是子陣列。用三個變數分別記錄最大值,到之前乙個數的最大值和...