回味尺取法(上)(有白書例題)

2021-10-04 19:51:30 字數 749 閱讀 4004

例題:給定長度為n的數列整數a0,a1,a2,an-1,以及整數s,求出總和不小於s的連續子串行的長度的最小值,如果不存在輸出0.

尺取法的思路:

(1)以s=t=sum=0初始化。

(2)只要有sum(3)如果(2)中的要求無法滿足sum>=s則終止,否則的話更新res=min(res,t-s)

(4)將sum減去as,s增加1然後回到(2)。

對於這個演算法,因為最多變化n次,因此只需要0(n)的複雜度就可以解決這個問題。

void solve() 

if (sum < s) break;

res = min(res, t - s);

sum -= a[s++];

} if (res < n)

cout << res << endl;

}

資料一:n=10,s=15,a=

資料一對應的的區間變化。

513

51074

9285

13510

7492

8513

51074

9285

13510

7492

8513

51074

9285

13510

7492

8513

51074

9285

13510

7492

8

回味尺取法(下)例題 poj3320

例題 題目大意 jessica開始讀一本很厚的書,需要把書中所有知識點都掌握,這本書總共p頁,第i頁恰好有乙個知識點ai,每個知識點都有乙個整數編號 全書中同乙個知識點可能會被多次提到,所以他希望通過閱讀其中連續的一些頁把所有的知識點都覆蓋到,給定沒有人寫到的知識點,求出閱讀的最少頁數。樣例 p 5...

尺取法及例題

尺取法 顧名思義,像尺子一樣取一段,借用挑戰書上面的話說,尺取法通常是對陣列儲存一對下標,即所選取的區間的左右端點,然後根據實際情況不斷地推進區間左右端點以得出答案。之所以需要掌握這個技巧,是因為尺取法比直接暴力列舉區間效率高很多,尤其是資料量大的時候,所以尺取法是一種高效的列舉區間的方法,一般用於...

常用技巧之 尺取法 理解 例題

尺取法的複雜度為 o n 主要應用有關連續性的問題,基本原理就是反覆地推進區間的開頭和末尾,來求取滿足條件的最小區間,或者相似的應用。尺取法在別的地方又被稱為滑動視窗或者蠕蟲演算法,我覺得蠕蟲演算法這個名稱用的相當恰當啊,就是一步一步地往後移動,一直找到答案,而不用遍歷回溯什麼的,也就是因為這樣,他...