leetcode演算法總結 —— 雙指標(滑動視窗)
阿新 • • 發佈:2021-02-01
技術標籤:leetcode演算法總結指標演算法
滑動視窗
注意我們的視窗是left到right的區間,我們定義的window儲存該區間的值,可以儲存該區間有用的值或者所有值,這個根據情況來看。
window可以是陣列或者map或者。。。
滑動視窗演算法框架
int left = 0, right = 0;
while (right < s.size()) {
//視窗增加值
window.add(s[right]);
//判斷處理資料的時機,如果求最大滑窗應該放在外面。
//判斷何時視窗左邊界需要需收縮或滑動(重點判斷條件)
while (window needs shrink) {
//判斷處理資料時機,如果求最小滑窗,則放在裡面
// 視窗移除值
window.remove(s[left]);
//縮小視窗
left++;
}
// 增大視窗
right++;
}
-
- 長度最小的子陣列
-
- 無重複字元的最長子串
-
- 字串的排列
-
- 找到字串中所有字母異位詞
-
- 最小覆蓋子串(思路同上,優化較難)
-
- 至多包含 K 個不同字元的最長子串(該題注意,求最大視窗,那麼判斷資料處理時機與最小視窗不同)
左右指標
左右指標主要解決陣列(或者字串)中的問題,其中很多是二分查詢。
還有一部分是刪除重複資料,詳見陣列。
-
- 彙總區間
頭尾雙指標
-
- 反轉字串
-
- 兩數之和 II - 輸入有序陣列
快慢指標
快慢指標主要解決連結串列中的問題,詳情見連結串列總結