题目描述
方法:
1. 暴力遍历
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
if not nums:
return []
i,j = 0, k
n = len(nums)
res = []
while j<n+1:
res.append(max(nums[i:j]))
i+=1
j+=1
return res
缺点:时间复杂度过高,无法通过
2.非严格递减队列,队列头保存最大 值
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
if not nums or k == 0:
return []
deque = collections.deque()
n = len(nums)
for i in range(k):
while deque and deque[-1]<nums[i]:
deque.pop()
deque.append(nums[i])
res = [deque[0]]
for i in range(k,n):
if deque[0] == nums[i-k]:
deque.popleft()
while deque and deque[-1]<nums[i]:
deque.pop()
deque.append(nums[i])
res.append(deque[0])
return res