滑動視窗詳解及其應用

2021-10-07 15:31:43 字數 3261 閱讀 8342

僅供自己複習

借鑑李威大佬的

滑動視窗說白了也是雙指標的一種變體,不過區別在於最開始視窗裡為空(也就是說左右指標指向同乙個),然後不斷移動右邊的指標,直到滿足某條件後再收縮左邊的指標

所以一般是雙層迴圈,第一層迴圈動右指標,第二層迴圈動左指標,然後滿足某條件或終止條件就返回

自個兒總結了乙個模板

function window(s) 

// 得出結果的一些**

if(...)

// 收縮左邊

....

left--

} return ...

}

1、無重複字元的最長子串

/**

* @param s

* @return

*/var lengthoflongestsubstring = function(s)

max = math.max(max, stack.length)

stack.shift()

left++

}return max

};

2、最小覆蓋子串

我在演算法總結裡也寫了這道題,不過有點不一樣

/**

* @param s

* @param t

* @return

*/var minwindow = function(s, t) , window = {}

let startindex = 0

for(let i = 0; i < t.length; i++)

needword[t[i]]++

}// 這裡的臨界判斷跟以前的用right0 && right < s.length)

window[s[right]]++

}right++

}if(needlen === 0 && right - left < len)

if(needword[s[left]] !== undefined)

window[s[left]]--

} left++

}return len === infinity ? '' : s.slice(startindex, startindex + len)

};

3、找到字串中所有字母異位詞

/**

* @param s

* @param p

* @return

*/var findanagrams = function(s, p) , window = {}

let needlen = p.length

for(let i = 0; i < p.length; i++)

needword[p[i]]++

}while(left <= right)

window[s[right]]++

}right++

}if(needlen === 0 && right - left === p.length)

if(needword[s[left]] !== undefined)

window[s[left]]--

} left++

}return res

};

4、長度最小的子陣列

以前寫的,也跟滑動視窗差不多

/**

* @param s

* @param nums

* @return

*/var minsubarraylen = function(s, nums)

sum += nums[right]

right++

while(sum >= s)

}return count === number.max_value ? 0 : count

};

重新寫的

/**

* @param s

* @param nums

* @return

*/var minsubarraylen = function(s, nums)

while(right < nums.length && sum < s)

if(sum >= s)

sum -= nums[left]

left++

}return cnt === infinity ? 0 : cnt

};

5、字串的排列

/**

* @param s1

* @param s2

* @return

*/var checkinclusion = function(s1, s2) , window = {}

let needlen = s1.length

for(let i = 0; i < s1.length; i++)

needword[s1[i]]++

}while(left <= right)

window[s2[right]]++

}right++

}if(right - left === s1.length && needlen === 0)

if(needword[s2[left]] !== undefined)

window[s2[left]]--

}left++

}return false

};

佇列及其應用(滑動視窗求最大值)

一 佇列 queue 1 佇列的特點 佇列 queue 與棧一樣,是一種線性儲存結構,它具有如下特點 note 1 佇列中的資料元素遵循 先進先出 first in first out 的原則,簡稱fifo結構。2 在隊尾新增元素,在隊頭刪除元素。佇列在棧在計算機中應用相當廣泛,包括廣度優先搜尋 c...

Flink的滾動視窗 會話視窗 滑動視窗及其應用

flink作業中的視窗 是指一種對無限資料流設定有限資料集,從而實現了處理無線資料流的機制。視窗本身只是個劃分資料集的依據,它並不儲存資料。當我們需要在時間視窗維度上對資料進行聚合時,視窗是流處理應用中經常需要解決的問題。flink的視窗運算元為我們提供了方便易用的api,我們可以將資料流切分成乙個...

TCP IP詳解 滑動視窗機制及其三種協議

在介紹滑動視窗之前先來簡單介紹一下tcp可靠傳輸原理中的停止等待協議,該協議就是傳送方每傳送乙個報文段後就停止傳送,一直等收到接收方的確認後再傳送下乙個報文段。tcp通訊是全雙工的,這裡為了方便理解,就以乙個方向為例,假設a為傳送方,b為接收方。a會有乙個傳送視窗,b有乙個接收視窗。傳送視窗表示在沒...