构造队列
代码后续补上
堆
代码后续补上
Leetcode (239) 滑动窗口最大值
题目
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口 k 内的数字。滑动窗口每次只向右移动一位。
返回滑动窗口最大值。
分析
调用了双端队列,首先进行常规判断,排除一些简单的情况。通过一个双端队列进行读取,达到滑动窗口的目的,同时每次循环结束后输出符合条件的队列头元素存入res中。我的理解是qmax队列头在右,尾在左。依次往右进行判断,将队尾元素与新加入的元素进行比较,此外还要判断对头元素是否过期。
代码
from collections import deque
class Solution(object):
def maxSlidingWindow(self, nums, k): # 144ms
if k == 1:
return nums
if not nums:
return []
# 新建一个双端队列qmax,初始化为0
# res为一个数组,存放结果
qmax = deque()
qmax.append(0)
res = []
for x,y in enumerate(nums[1:],start=1):
if nums[qmax[-1]] &