defwindow_max(nums,k): '''在一个数组中,找出所有位置的滑动窗口的最大值 Args: nums: 一维数组 k: 滑动窗口的大小 Returns: 返回一个数组,统计滑动窗口的最大值 ''' n = len(nums) mono_queue = collections.deque() ans = [] for i inrange(k-1): while mono_queue and nums[mono_queue[-1]] < nums[i]: mono_queue.pop() mono_queue.append(i) for i inrange(k-1,n): while mono_queue and nums[mono_queue[-1]] < nums[i]: # 维护单调队列中头部为最大值 mono_queue.pop() mono_queue.append(i) while mono_queue and mono_queue[0] <= i-k: # 此时最大值已经不在滑动窗口内了,需要移除掉 mono_queue.popleft() ans.append(nums[mono_queue[0]]) return ans