给定一个数组 nums
和滑动窗口的大小 k
,请找出所有滑动窗口里的最大值。
示例:
输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
输出: [3,3,5,5,6,7]
解释:
滑动窗口的位置 最大值
--------------- -----
[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7
1、题目分析
用一个大小为k的窗口在原始数组上去滑动,然后取出这个窗口中最大值。
2、解题分析
维护一个大小为k的窗口,然后求出这个窗口的最大值行了。
3、代码
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
#如果数组为空或者数组的长度小于窗口的长度就返回空
if not nums or len(nums)<k:
return []
n = len(nums)
res = []
i=0
#从左边开始遍历
while i<n and i+k<=n:
#找出数组的最大值
temp = max(nums[i:i+k])
res.append(temp)
i+=1
return res
总结:双端队列的答案没看懂,看懂了在记录一下,确实比这个笨方法的时间消耗少的多。