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