LeetCode演算法題152 乘積最大子串行解析

2021-09-11 20:38:20 字數 953 閱讀 3048

給定乙個整數陣列 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 ...