中等難度題目
給你乙個整數陣列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 ...