滑動視窗演算法

2021-10-19 04:11:47 字數 976 閱讀 1197

在letecode程式設計中經常會碰到一類尋找最長序列的問題,這個時候都可以採用滑動視窗的演算法

滑動視窗就是控制乙個雙指標left, right, 沒有達到極限條件的時候right指標,操作臨界條件

就讓left指標,然後更新這個最長序列。

比如下面的的問題:

問題一:給你兩個長度相同的字串,s 和 t。

將 s 中的第 i 個字元變到 t 中的第 i 個字元需要 |s[i] - t[i]| 的開銷(開銷可能為 0),也就是兩個字元的 ascii 碼值的差的絕對值。

用於變更字串的最大預算是 maxcost。在轉化字串時,總開銷應當小於等於該預算,這也意味著字串的轉化可能是不完全的。

如果你可以將 s 的子字串轉化為它在 t 中對應的子字串,則返回可以轉化的最大長度。

如果 s 中沒有子字串可以轉化成 t 中對應的子字串,則返回 0。

解題方法就是採用滑動視窗的方法進行,**如下:

class solution 

int right =0;

int left = 0;

int sum = 0;

int maxlen = 0;

while (right < diff.size())

maxlen = max(maxlen, right-left + 1);

right= right+1;

}return maxlen;

}};

問題二:給定乙個字串,可以將某乙個字元替換成其他字元,現在假定最大的替換次數為k,請找出最後字串中最長的重複子串。

思路處理還是一樣的,**如下:

int findmaxlen(string s, int k)

right++;

} return right - left;

}

滑動視窗演算法

我們學習過計算機網路都知道為了避免擁塞發生,在網路傳輸時有滑動視窗協議控制傳輸時流量。該協議允許傳送方在停止並等待確認前傳送多個資料分組。由於傳送方不必每發乙個分組就停下來等待確認,因此該協議可以加速資料的傳輸,提高網路吞吐量。這個跟我們今天說的滑動視窗演算法是乙個原理。該演算法的作用就是將我們多層...

滑動視窗演算法

滑動視窗演算法可以用以解決陣列 字串的子元素問題,它可以將巢狀的迴圈問題,轉換為單迴圈問題,降低時間複雜度。給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。輸入 s abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。通過不斷滑動視窗的大小,判斷視窗中元...

滑動視窗演算法 演算法 滑動視窗 二

演算法 這算是滑動視窗的另外乙個典型題目,在資料量比較少的時候,可以直接採用暴力法解決 不過資料量比較大的時候,我們就需要想辦法解決視窗裡面最大值的思路,這裡我們採用雙端佇列queue來實現,借助 queue來儲存前面計算過的最大值資訊。題目 解法1 暴力解法 按照 視窗大小,從頭到尾依次遍歷,將每...