239. Sliding Window Maximum
題目網址:https://leetcode.cn/problems/sliding-window-maximum/
題意:給一整數 array
nums, 有一個大小為k的 sliding window 從nums的最左側移動到最右側。你只能看到 sliding window 中的k個數字, 且 sliding window 每次只向右移一位, 返回 sliding window 中的最大值。

Solution:
想法:利用 deque。因為
window移除元素後, 有可能會改變最大值, 故也要記錄最大值之外的值。首先, 建立遞減 Queue(Monotonic Queue), 把當前
window中最大值的 index 放在deque的最前面。
nums[i]加入前, 要先不斷地和deque.back()比較
- 若
nums[i] > nums[deque.back()], 則deque.pop_back()- 若
nums[i] ≤ nums[deque.back()], 則將i放入deque最後面- 若
window的起始位置≥ deque.front(), 代表在下一輪deque.front()超出window所涵蓋的範圍, 故要 pop 掉
class Solution { |
- time:$O(n)$ ➔ 每個元素最多被 push/pop 一次
- space:$O(k)$ ➔ deque 的元素個數不超過
k
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論
