239. 滑动窗口最大值
难度:困难
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回 滑动窗口中的最大值 。
示例 1:
输入: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
示例 2:
输入:nums = [1], k = 1
输出:[1]
这个题是LeetCode热题100中的第239题,难度为困难,有点奇怪,这个题感觉并没有什么难度,既不需要建立复杂的模型,在程序编写上也是平铺直叙,并不需要转弯磨角,但居然难度就标为困难,有点想不明白,如果把滑动窗口改为一个平面的窗口,或许难度要增加一点,不知道大家是怎么认为的?
根据题目描述,就是不断获取长度为k的连续子串,然后找到其中的最大值,并以列表的形式输出。
程序如下:
#输入原始整数数组nums和滑动窗口大小k
nums=eval(input('pls input nums='))
k=int(input('pls input k='))
#设置一个空列表用于存储滑动窗口中的最大值,滑动窗口子串采用循环不断截取
a=[]
for i in range(len(nums)-k+1):
x=nums[i:i+k]
y=max(x)
a.append(y)
#输出滑动窗口产生的最大值
print(a)
运行实例:
pls input nums=[1,3,-1,-3,5,3,6,7]
pls input k=3
[3, 3, 5, 5, 6, 7]
pls input nums=[1]
pls input k=1
[1]
pls input nums=[2,3,4,5,7,9,2,5]
pls input k=3
[4, 5, 7, 9, 9, 9]
从这个问题的解决来看,用python仿佛没有什么难度,或许这也是python的优势吧,能够轻松处理用其它编程语言感觉难度较大的问题。