题目:
理解:
关键点:
- 确认窗口的下标
- 双端队列来简化每次查找窗口内最大值的时间复杂度(从O(k)变为O(1))
- 实现窗口内O(1)的复杂度,通过建立一个单调递减的双端队列来实现
- 在双端队列中,随着窗口的移动,队首元素出队来改变当前窗口内的最大值
- 在双端队列中,随着窗口的移动,队尾元素出队来建立一个单调递减的队列
代码:
class Solution:
def maxSlidingWindow(self, nums, k):
queue = []
result = []
for i, j in zip(range(1 - k, len(nums) - k + 1), range(len(nums))):
#一共出队和入队两种操作
#进行出队,从队首进行出队
if i > 0 and queue[0] == nums[i - 1]:
queue.pop(0)
#进行出队,建立一个单调递减的队列
while queue and queue[-1] < nums[j]:
queue.pop()
queue.append(nums[j])
if i >= 0:
result.append(queue[0])
return result