239. Sliding Window Maximum
传说中需要使用特殊数据结构来解题的sliding window,本质上还是移动指针、维护一个window,只是通过window获取题目要求的答案时,需要使用特殊的数据结构。
这道题需要把window维护成一个单调queue,每次push元素进来时,比该元素小的已有元素都会被pop出去,这样queue的第一个元素就永远是window的最大值。
class Solution:
def maxSlidingWindow(self, nums, k):
window = collections.deque()
ans = []
for i in range(len(nums)):
# 比右指针元素小的就pop掉
while window and nums[i] >= nums[window[-1]]:
window.pop()
window.append(i)
# 当右指针超过k,就开始填写结果
if i >= k - 1:
ans.append(nums[window[0]])
# 当window size 超过k,移动左指针
if i + 1 - window[0] == k:
window.popleft()
return ans
Last updated
Was this helpful?