在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 暴力解法 按照 視窗大小,從頭到尾依次遍歷,將每...