Leetcode 152每日一題 乘積最大子陣列

2022-05-18 23:00:49 字數 913 閱讀 4285

中等難度題目

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

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

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

思路:max2 記錄每乙個元素為截止的子陣列乘積的最大最小,

(1)當前數 a[i]為正,則最大值為 i-1 結尾的最大值max2[i-1]*a[i] or a[i]

(2)a[i]為負,以a[i]為結尾的子陣列,最大值為 i-1 結尾的最小值min2[i-1]*a[i] or a[i]

(3)a[i]為0,i結尾的乘積最大最小都為0
可以優化不用兩個list存放max和min

tclass solution:

def maxproduct(self, nums: list[int]) -> int:

if len(nums)==0:

return 0

max2 = [nums[0]]

min2 = [nums[0]]

for i in range(1,len(nums)):

if nums[i]>0:

max1 = max(max2[i-1]*nums[i],nums[i])

min1 = min(min2[i-1]*nums[i],nums[i])

elif nums[i]<0:

max1 =max(min2[i-1]*nums[i],nums[i])

min1 = min(max2[i-1]*nums[i],nums[i])

elif nums[i]==0:

max1 = 0

min1 = 0

return max(max2)

leetcode152題之動態規劃

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

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

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 ...