Skip to content

239. 滑动窗口最大值 ​

  • 题号:239
  • 来源:LeetCode
  • 难度:困难
  • 标签:滑动窗口 队列
  • 语言:TypeScript · Python
  • 解法:2 个
  • 作者:lmliheng
  • 最近更新:2026-09-29

TypeScript ​

TypeScript · O(n) 时间 · O(k) 空间 · 更新于 2026-09-27

单调递减队列存下标,队头为窗口最大值

typescript
/**
 * @difficulty hard
 * @tags 滑动窗口,队列
 * @time O(n)
 * @space O(k)
 * @note 单调递减队列存下标,队头为窗口最大值
 * @239. 滑动窗口最大值
 */
let nums = [1, 3, -1, -3, 5, 3, 6, 7]
let k = 3

const result: number[] = [];           // 存放结果
const deque: number[] = [];            // 单调递减队列,存储索引

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

    if (deque.length > 0 && deque[0] < i - k + 1) {
        deque.shift();  // 移除队头
    }

    while (deque.length > 0 && nums[deque[deque.length - 1]] < nums[i]) {
        deque.pop();    // 移除队尾
    }

    deque.push(i);

    // 当窗口形成时,记录当前窗口最大值
    if (i >= k - 1) {
        result.push(nums[deque[0]]);
    }
}

console.log(result)

源码:ts/leetcode/239. 滑动窗口最大值.ts

Python ​

Python · O(n) 时间 · O(k) 空间 · 更新于 2026-09-29

单调双端队列维护窗口最大值

python
"""
@difficulty hard
@tags 滑动窗口,队列
@time O(n)
@space O(k)
@note 单调双端队列维护窗口最大值
滑动窗口最大值
lc 239
"""

class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        n=len(nums)
        dequene = []
        res = []
        for i in range(0,n):
            if len(dequene)>0 and dequene[0]<i-k+1:
                dequene.pop(0)
            while len(dequene)>0 and nums[dequene[len(dequene)-1]]<nums[i]:
                dequene.pop()
            dequene.append(i)
            if i>=k-1:
                res.append(nums[dequene[0]])
        return res

源码:python/leetcode/hot100/11.py


在 GitHub 上查看题目所在目录:lmliheng/algorithm