動態規劃 leetcode 152 乘積最大子陣列

2021-10-05 02:56:54 字數 1359 閱讀 9174

乘積最大子陣列

給你乙個整數陣列 nums ,請你找出陣列中乘積最大的連續子陣列(該子陣列中至少包含乙個數字)。

示例 1:

輸入: [2,3,-2,4]

輸出: 6

解釋: 子陣列 [2,3] 有最大乘積 6。

示例 2:

輸入: [-2,0,-1]

輸出: 0

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

乘積最大子陣列,與最大子序和是很類似,不同的這裡的是乘積最大,因為序列中的值有正有負,所以每個時刻的狀態需要考慮到最大值和最小值,

因為最小值與負數的乘積可能會更大,還需要記錄每個時刻的全域性最大值。

所以狀態轉移方程是:

mins[1] = min(mins[0]*nums[i], maxs[0]*nums[i], nums[i])

maxs[1] = max(mins[0]*nums[i], maxs[0]*nums[i], nums[i])

**:

nums =[-

2,1,

10,4,

-1,0

,1,5

,4,3

]class

solution

:def

maxsubarray

(self, nums)

: dp = nums[0]

maxs =

[nums[0]

]*2 mins =

[nums[0]

]*2for i in

range(1

,len

(nums[1:

])+1

):mins[1]

=min

(mins[0]

*nums[i]

, maxs[0]

*nums[i]

, nums[i]

) maxs[1]

=max

(mins[0]

*nums[i]

, maxs[0]

*nums[i]

, nums[i]

) dp =

max(maxs[1]

, dp)

maxs[0]

, mins[0]

= maxs[1]

, mins[1]

return dp

s = solution(

)s.maxsubarray(nums)

資料過程:

leetcode152題之動態規劃

動態規劃 動態規劃 dynamic programming 是運籌學的乙個分支,是求解決策過程 decision process 最優化的數學方法。20世紀50年代初美國數學家r.e.bellman等人在研究多階段決策過程 multistep decision process 的優化問題時,提出了著...

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結尾乘積最大連...