給定乙個整數陣列 nums ,找出乙個序列中乘積最大的連續子串行(該序列至少包含乙個數)。
示例 1:
輸入: [2,3,-2,4]
輸出: 6
解釋: 子陣列 [2,3] 有最大乘積 6。
示例 2:
輸入: [-2,0,-1]
輸出: 0
解釋: 結果不能為 2, 因為 [-2,-1] 不是子陣列。
這個題和最大子序和有些類似,但是這個題更複雜一些,包含了負數,所以不僅需要儲存最大值,還需要儲存最小值,因為,最小值可能是負數,與當前值相乘可能會產生乙個大數。利用動態規劃,把前面的最大值和最小值儲存下來,然後更新最大值最小值,然後更新結果。
c++源**:
class
solution
return res;}}
;
python3源**:
class
solution
:def
maxproduct
(self, nums: list[
int])-
>
int:
m = n = res = nums[0]
for i in
range(1
,len
(nums)):
mx = m
mn = n
m =max(nums[i]
, mx*nums[i]
, mn*nums[i]
) n =
min(nums[i]
, mx*nums[i]
, mn*nums[i]
) res =
max(m, res)
return res
leetcode152題之動態規劃
動態規劃 動態規劃 dynamic programming 是運籌學的乙個分支,是求解決策過程 decision process 最優化的數學方法。20世紀50年代初美國數學家r.e.bellman等人在研究多階段決策過程 multistep decision process 的優化問題時,提出了著...
LeetCode第152題 乘積最大子串行
給定乙個整數陣列 nums 找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0 解釋 結果不能為 2,因為 2,1 不是子陣列。nums i 1 必然會得到乙個 max值,那麼...
LeetCode 152題 乘積最大子串行
示例 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6,返回為6。思路 動態規劃 定義陣列 dpmax i 表示以第i個元素結尾的子陣列中乘積最大的值,這個陣列必須包含第i個元素 對於 dpmax i 有三種取值 1.nums i 0 且 dpmax i 1 0 則 dpmax ...