思路
这道题为什么在leetcode里试easy。。。怀疑人生。
之前做过一道在O(1)时间内找到最小值的栈(面试题30)和两个栈实现队列(面试题9),因此结合二者可以完成这道题。
第二种思路:
把有可能成为滑动窗口最大值的数值存入一个两端开口的队列。
deque = collections.deque()
res, n = [], len(nums)
for i, j in zip(range(1 - k, n + 1 - k), range(n)):
if i > 0 and deque[0] == nums[i - 1]:
deque.popleft() # 删除 deque 中对应的 nums[i-1]
while deque and deque[-1] < nums[j]:
deque.pop() # 保持 deque 递减
deque.append(nums[j])
if i >= 0:
res.append(deque[0]) # 记录窗口最大值
return res