尺取法及例題

2021-09-17 05:06:56 字數 907 閱讀 3984

尺取法:顧名思義,像尺子一樣取一段,借用挑戰書上面的話說,尺取法通常是對陣列儲存一對下標,即所選取的區間的左右端點,然後根據實際情況不斷地推進區間左右端點以得出答案。之所以需要掌握這個技巧,是因為尺取法比直接暴力列舉區間效率高很多,尤其是資料量大的時候,所以尺取法是一種高效的列舉區間的方法,一般用於求取有一定限制的區間個數或最短的區間等等。當然任何技巧都存在其不足的地方,有些情況下尺取法不可行,無法得出正確答案。

使用尺取法應該注意下列幾點

1、 什麼情況下能使用尺取法? 2、何時推進區間的端點? 3、如何推進區間的端點? 4、何時結束區間的列舉?

尺取法通常適用於選取區間有一定規律,或者說所選取的區間有一定的變化趨勢的情況,通俗地說,在對所選取區間進行判斷之後,我們可以明確如何進一步有方向地推進區間端點以求解滿足條件的區間,如果已經判斷了目前所選取的區間,但卻無法確定所要求解的區間如何進一步得到根據其端點得到,那麼尺取法便是不可行的。首先,明確題目所需要求解的量之後,區間左右端點一般從最整個陣列的起點開始,之後判斷區間是否符合條件在根據實際情況變化區間的端點求解答案。

下面我們來看乙個例子

![在這裡插入描述](

下面是偽**實現:

int l,r,sum,i,s;

i=sum=l=0;

result=n+1;

while(1)

int num=t.size();

while(1)

printf("%d\n",ans);

return 0;

}

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

例題 給定長度為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減...

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

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

回味尺取法(下)例題 poj3320

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