Menu
CoddyTech

Sliding Window Maximum

你会得到一个整数数组 nums 和一个窗口大小 k。由 k 个连续值组成的窗口从最左端开始,每次向右移动一个位置,直到窗口右边缘到达最后一个值。按从左到右的顺序,返回窗口在每个位置上的最大值:对于长度为 n 的数组,共有 n-k+1 个值。

函数

maxSlidingWindow(nums: integer-array, k: integer) → integer-array
numsinteger-array
窗口滑过的数组
kinteger
每个窗口中的值的数量
返回值integer-array
每个窗口中的最大值,从最左侧窗口到最右侧窗口

约束条件

  • 1 ≤ k ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • 结果包含 nums.length-k+1 个值,每个窗口对应一个,按从左到右的顺序排列。

示例

输入
nums = [4, 2, 12, 3, 8, 5, 1]k = 3
输出
[12, 12, 12, 8, 8]
解释
12 位于最初的三个窗口中,因此每个窗口的答案都是 12。12 滑出后,[3, 8, 5] 和 [8, 5, 1] 的最大值都是 8。
challenge icon

进阶

你能构建一个队列,支持在队尾添加一个值、移除队首的值,以及读取当前最大值,并且每项操作的均摊时间复杂度都是 O(1) 吗?

重置代码
def maxSlidingWindow(nums, k):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

nums = [4, 2, 12, 3, 8, 5, 1]
k = 3

预期输出

[12, 12, 12, 8, 8]