给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口 k 内的数字。滑动窗口每次只向右移动一位。
返回滑动窗口最大值。
示例:
输入: nums =[1,3,-1,-3,5,3,6,7], 和 k =3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置 最大值
--------------------[13-1]-3536731[3-1-3]5367313[-1-35]367513-1[-353]67513-1-3[536]7613-1-35[367]7
python解答
classSolution:defmaxSlidingWindow(self, nums: List[int], k:int)-> List[int]:# 第一种# if len(nums) == 0 or len(nums) < k: return []# res = []# for i in range(len(nums) - k + 1):# res.append(max(nums[i:i+k]))# return res# 第二种ifnot nums:return[]
window, res =[],[]for idx, value inenumerate(nums):iflen(window)>0and window[0]<= idx - k:# 当窗口宽度大于k时,将最左边的元素弹出
window.pop(0)whilelen(window)>0and nums[window[-1]]< value:# 就是比当前值小的那些索引是没有用的
window.pop()
window.append(idx)if k <= idx +1:
res.append(nums[window[0]])return res