最短子串行和問題

2022-08-20 14:57:11 字數 465 閱讀 8300

有n個正整數組成乙個 序列。給定整數s, 求長度最短的連續序列, 使他們的最大和大於或等於s。

書中給出3種思路, 先上圖:

a.  暴力列舉起點和終點,並且依次求和。 複雜度n3

b. 如圖所示,a方法中曲線部分包括許多重複的區間, 可以通過儲存字首來降低一些複雜度, 得到n2演算法。

令b[i] = a[0]+a[1]+...a[i], 則b[j] - b[i] = a[i] +...+a[j],  也就是可以在o(1)時間內計算出子串行和。 

此方法本質是:通過空間換時間省去計算過程。 但此方法也要列舉起點和終點,複雜度不會低於n2.

c. 考慮只列舉終點。對於點 j, 只需要找到滿足 b[j]-b[i]>=s 最大的i值即可。問題變成了n輪查詢(可使用二分,原陣列全為整數,b序列一定遞增)。

繼續挖掘, 發現隨著 j 遞增, i值一定是遞增的。 最終可將解法優化到n。

最短子串行 最短摘要

題目 有一段廣告,它由很多單詞構成,然後它有個摘要,即關鍵字,問包含摘要 關鍵字 的在廣告正文中的最短字串是什麼?簡而言之,就是說求在原字串中包含所有關鍵字的最短子串行。演算法思想 將每個關鍵字在原字串中位置記錄在乙個陣列中,每個關鍵字對應乙個陣列,然後令distance max a i b j c...

子串行問題

最近做了兩道子串行問題,分別是 53 最大子串行和和152 乘積最大子串行 他們解決的辦法大致相同,都是經過一次遍歷儲存乙個遍歷到當前數字的最大值,然後保留乙個當前增益或但當前成績,於是放到一起做乙個總結。53 最大子串行和 來自leetcode題解 動態規劃的是首先對陣列進行遍歷,當前最大連續子串...

子串行問題

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