子串行問題

2021-10-01 07:12:19 字數 1084 閱讀 2856

最近做了兩道子串行問題,分別是

53、最大子串行和和152、乘積最大子串行

他們解決的辦法大致相同,都是經過一次遍歷儲存乙個遍歷到當前數字的最大值,然後保留乙個當前增益或但當前成績,於是放到一起做乙個總結。

53、最大子串行和(來自leetcode題解)

動態規劃的是首先對陣列進行遍歷,當前最大連續子串行和為 sum,結果為 ans

如果 sum > 0,則說明 sum 對結果有增益效果,則 sum 保留並加上當前遍歷數字

如果 sum <= 0,則說明 sum 對結果無增益效果,需要捨棄,則 sum 直接更新為當前遍歷數字

每次比較 sum 和 ans的大小,將最大值置為ans,遍歷結束返回結果

時間複雜度:o(n)

class solution  else 

ans = math.max(ans, sum);

}return ans;

}}

152、乘積最大子串行

這道題值只是跟上一道略有不同。

令imax為當前最大值,則當前最大值為 imax = max(imax * nums[i], nums[i])

由於存在負數,那麼會導致最大的變最小的,最小的變最大的。因此還需要維護當前最小值imin,imin = min(imin * nums[i], nums[i])

當負數出現時則imax與imin進行交換再進行下一步計算

時間複雜度:o(n)

class solution:

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

maxx,imax,imin=float('-inf'), 1, 1

for num in nums:

if num<0:

imax, imin = imin, imax

imax = max(imax*num,num)

imin = min(imin*num,num)

maxx=max(maxx,imax)

print(maxx,imax,imin)

return maxx

子串行問題

1.最長上公升子串行 乙個數的序列bi,當b1比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等。這些子串行中最長的長度就是4,比如子串行 1,3,5,8 你的任務就是對於給定的序列,求出最長上公升子串行的長度。3.最大子段和問題 問題分析 狀態設計 d...

子串行問題

南昌理工學院ps 這周划水嚴重,就不發學習總結了 最長上公升子串行lis lis 最長上公升子串行 本蒟蒻只會用 想理解點這 n n模板 定義a n 為要求的序列 for int i 1 i n i dp i na 1 nlogn模板 用二分的方法進行查詢比較,節省時間 查詢a n int len ...

最長不降子串行問題

一 問題 輸入 設有由n個不相同的整數組成的數列,記為 a 1 a 2 a n 且a i a j i j 若存在i1長度為e的不下降序列。輸出 程式要求,當原數列給出之後,求出最長的不下降序列。例子 數列3,18,7,14,10,12,23,41,16,24。3,18,23,24就是乙個長度為4的不...