
[LeetCode] Sliding Window Quest
Sliding Window類型的題目通常會要求要從陣列中,找出一段範圍內的子陣列,並根據不同的條件從中抽取特定的答案。
解題心得
- 演算法的複雜度,通常是O(n)
- 所以當你發現你的算法好像沒辦法走訪一次就結束的時候,就要注意思考方向是不是錯了。
- 通常不太關心,也不特地維護子陣列中間的元素的狀態。
- 只關注
邊界
在移動的時候的條件判斷。
相關題目:
- 643 Maximum Average SubArray 1
- 1456 Maximum Number of Vowels in a Substring of Given Length
- 1004 Max Consecutive Ones 3
- 1493 Longest Subarray of 1’s After Deleting One Element
Solution Template
let left = 0;
let right = 0;
while (right < nums.length) {
if (nums[right] ...) { // Some condition
...
}
// Some Condition
if (...) {
...
left++;
}
right++;
}
- 其中,觀察643, 1456可以發現到,我們能夠先把真正要開始滑動的索引i, j先根據題目的範圍長度(k)初始化到正確的位置後,逐步的透過類似移除
nums[i - k]
或是nums[j - k]
元素來做到滑動的效果