leetcode152 乘積最大子串行

2021-10-03 20:18:58 字數 1111 閱讀 2085

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

示例 1:

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

輸出: 6

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

示例 2:

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

輸出: 0

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

動態規劃

我們需要維護乙個最小值(loc_min),因為如果最小值是乙個負數的話,那麼最小值乘上乙個負數就變成了乙個正數,它很能是乙個glb_max。那麼我們的轉移方程就很簡單了

loc_min[i] = min(loc_max[i−1]∗nums[i], loc_min[i−1]∗nums[i], nums[i])

loc_max[i] = max(loc_max[i−1]∗nums[i], loc_min[i−1]∗nums[i], nums[i])

時間複雜度:o(n)

空間複雜度:o(n)

class

solution

:def

maxproduct

(self, nums: list[

int])-

>

int:

n =len(nums)

mymin = nums[0]

mymax = nums[0]

global_max = nums[0]

for i in

range(1

, n)

: tempmin, tempmax = mymin, mymax

mymin =

min(tempmin*nums[i]

, tempmax*nums[i]

, nums[i]

) mymax =

max(tempmin*nums[i]

, tempmax*nums[i]

, nums[i]

) global_max =

max(mymax, global_max)

return global_max

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 不是子陣列。用三個變數分別記錄最大值,到之前乙個數的最大值和...