239. Sliding Window Maximum
solution
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
if len(nums) < k:
return None
res = []
for i in range(k, len(nums)+1):
res.append(max(nums[i-k: i]))
return resclass Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
q = collections.deque() # 和单调栈一样,队列中保存的是indices
res = []
for i, cur in enumerate(nums):
while q and nums[q[-1]] <= cur: # 因为迭代前面已有保证,这次把queue右边比自己小的没用了,可以pop出去
q.pop()
q.append(i)
# 特别之处在这里: 超过滑动滑口的部分pop出去, 在已有迭代基础上 每次pop一个即可
if q[0] == i - k:
q.popleft()
# 如果窗口已经达到k的大小,记录最大值. 不够k的window不算
if i >= k - 1:
res.append(nums[q[0]])
return resfollow up
Last updated