classSolution:defmaxSlidingWindow(self,nums: List[int],k:int) -> List[int]: n =len(nums)if n ==0or k ==0:return [] queue =deque() ans = [] max_id =0for i inrange(k):# 如果最 queue 最左邊的值超過範圍了,要退出if queue and queue[0]== i - k: queue.popleft()# 如果當前比最後一個值大,那就不斷的把最後一個數字退出# 這樣可以確保最左邊的所記錄的位置,其位置的數字一定是最大的while queue and nums[i]> nums[queue[-1]]: queue.pop()# 如果當時 queue 的每一個數字都比現在的數字小,就會全部退出完,# 現在放進去的就是最大的# 如果當時 queue 的最後一個位置的值,比起現在的數字大# 那就會保留在最左邊 queue.append(i)# 更新最大值的 id if nums[i]> nums[max_id]: max_id = i ans.append(nums[max_id])# 後面同理for i inrange(k, n):if queue and queue[0]== i - k: queue.popleft()while queue and nums[i]> nums[queue[-1]]: queue.pop() queue.append(i) ans.append(nums[queue[0]])return ans