我是會寫bug的子晗,生命不止,演算法永不息!昨天晚上,閒來無事去學校acm隊訓練機房呆了一會,太受刺激了,大一的把我摁在地上摩擦,屬實很拉,學習了乙個滑動視窗演算法。唉,現在演算法剛開課,之前自己也學過一段時間,但刷體很少。以後晚上得經常去跟著他們一起去訓練了,這種行為我願稱之為「偷學"。(手動滑稽)
我個人覺得滑動視窗演算法思想與雙指標相似,模擬乙個視窗,建立的視窗逐漸滑動,根據題目給定的限制條件,來更新視窗邊界,從而不斷的更新題目所需值,當視窗滑動至邊界時,這時也意味著,演算法結束,即可獲得所需值。一般情況下,右邊界主動滑動,左邊界被動滑動。俗話說的好,實踐是檢驗真理的唯一標準!下面通過三道滑動視窗演算法題來深層次理解滑動視窗演算法的實際應用。
通過設定兩個指標,來作為視窗的邊界,模擬視窗滑動,當視窗有右邊界的字元已經存在於視窗內,左邊界就需要更新。同時更新最大子串長度,當右指標移動至字串末尾,視窗滑動完畢,所得值即為最大子串長度值。
#include
using
namespace std;
intmain()
for(
;jlength()
;j++)}
} maxlen=curlen>maxlen?curlen:maxlen;
//更新值
設定兩個雙指標,右指標滑動,當值出現大於等於m的情況時,進行值的更新,然後將左指標滑動至小於m,右指標繼續滑動至上述情況進行處理,直到右指標滑動至視窗邊界,演算法結束。
#include
using
namespace std;
intmain()
} end++
;//不滿足情況,右指標繼續移動}if
設定雙指標,右指標滑動,當遇到1時,繼續滑動,當遇到0時,判斷此時視窗內的0的個數是否等於題目給定的m,如果等於,左指標移動,直到去除乙個0為止,為新的0騰出位置。如果小於m,右指標繼續移動。然後進行值的更新,直到右指標移動至視窗邊界,演算法結束。
#include
using
namespace std;
intmain()
else
m--;}
max=
max(right-left+
1,max)
;//更新值
} cout<
return0;
}
演算法 滑動視窗演算法總結
今天,書店老闆有一家店打算試營業customers.length分鐘。每分鐘都有一些顧客 customers i 會進入書店,所有這些顧客都會在那一分鐘結束後離開。在某些時候,書店老闆會生氣。如果書店老闆在第i分鐘生氣,那麼grumpy i 1,否則grumpy i 0。當書店老闆生氣時,那一分鐘的...
滑動視窗演算法
我們學習過計算機網路都知道為了避免擁塞發生,在網路傳輸時有滑動視窗協議控制傳輸時流量。該協議允許傳送方在停止並等待確認前傳送多個資料分組。由於傳送方不必每發乙個分組就停下來等待確認,因此該協議可以加速資料的傳輸,提高網路吞吐量。這個跟我們今天說的滑動視窗演算法是乙個原理。該演算法的作用就是將我們多層...
滑動視窗演算法
在letecode程式設計中經常會碰到一類尋找最長序列的問題,這個時候都可以採用滑動視窗的演算法 滑動視窗就是控制乙個雙指標left,right,沒有達到極限條件的時候right指標,操作臨界條件 就讓left指標,然後更新這個最長序列。比如下面的的問題 問題一 給你兩個長度相同的字串,s 和 t。...