本方法主要使用双端队列来降低数据结构的时间复杂度
主要思路就是维护一个储存当前窗口最大值的双端队列,若进来的值大于队列的所有值,那么可以丢弃其他所有值(因为在此最大值出对前或者进入新的最大值之前,滑动窗口中最大值一直是此值),否则出队其他小于当前值的值然后入队。
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
if not nums or k == 0: return []
res = []
queue = collections.deque()
for i in range(k):
while queue and queue[-1] < nums[i]:
queue.pop()
queue.append(nums[i])
res.append(queue[0])
for i in range(k, len(nums)):
if nums[i-k] == queue[0]:
queue.popleft()
while queue and queue[-1] < nums[i]:
queue.pop()
queue.append(nums[i])
res.append(queue[0])
return res