[LeetCode] Sliding Window Quest

Jan. 12, 2023, 2:36 p.m.
演算法

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]元素來做到滑動的效果

Tags:

Algorithm
leetcode