滑动窗口最大值
题解思路
这道题的核心是滑动窗口,需要找到每个窗口的最大值。我们可以使用 单调队列(双端队列) 来优化求解。
算法思路:
- 维护一个双端队列 deque:
- 存储数组的索引,而不是值,这样方便判断窗口是否过期。
- 保证队列内索引对应的值单调递减(即队头最大)。
P4010.滑动窗口的最大值
Leetcode 239.滑动窗口的最大值-原题链接
题目内容
给你一个整数数组nums,有一个大小为 k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。
输出 滑动窗口中的最大值 。
输入描述
输入共两行。
-
第一行为两个个整数,n,k。
-
第二行为n个整数nums0,nums1,...,numsn−1,数字之间以空格分隔。
输出描述
如题,输出一行,数字之间以空格分隔。
样例1
输入
8 3
1 3 -1 -3 5 3 6 7
输出
3 3 5 5 6 7
说明
| 滑动窗口位置 |
最大值 |
| [1 3 -1] -3 5 3 6 7 |
3 |
| 1 [3 -1 -3] 5 3 6 7 |
| 1 3 [-1 -3 5] 3 6 7 |
5 |
| 1, 3 -1 [-3 5 3] 6 7 |
| 1 3 -1 -3 [5 3 6] 7 |
6 |
| 1 3 -1 -3 5 [3 6 7] |
7 |
样例2
输入
1 1
1
输出
1
提示
- 1<=nums.length<=105
- −104<=nums[i]<=104
- 1<=k<=nums.length