1. 程式人生 > 其它 >leetcode演算法總結 —— 雙指標(滑動視窗)

leetcode演算法總結 —— 雙指標(滑動視窗)

技術標籤: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++; }
    1. 長度最小的子陣列
    1. 無重複字元的最長子串
    1. 字串的排列
    1. 找到字串中所有字母異位詞
    1. 最小覆蓋子串(思路同上,優化較難)
    1. 至多包含 K 個不同字元的最長子串(該題注意,求最大視窗,那麼判斷資料處理時機與最小視窗不同)

左右指標

左右指標主要解決陣列(或者字串)中的問題,其中很多是二分查詢。
還有一部分是刪除重複資料,詳見陣列。

    1. 彙總區間

頭尾雙指標

    1. 反轉字串
    1. 兩數之和 II - 輸入有序陣列

快慢指標

快慢指標主要解決連結串列中的問題,詳情見連結串列總結