题目
给定一个数组 nums,有一个大小为 M 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 M 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值
输入值 N --数组的元素个数
输入值nums --数组
输入值M --滑动窗口的大小
def Max_Skip_Window_Sum(P,N,M):
#定义一个列表放得到的窗口和的值
max_sum_window=0
sum_window=0
#获取得到的数值
skip_window = []
for i in P:
i=int(i)
if len(skip_window)<M: #此处得小于,否则滑动窗口会有4个值
skip_window.append(i)
else:
#skip_window已装满3个值,则计算该值大小,并放入求和列表中
sum_window=sum(skip_window)
if sum_window>max_sum_window:
max_sum_window=sum_window
#移除skip_window第一个数字
skip_window.pop(0)
skip_window.append(i) #此处勿忘加上当前的循环的数字
return max_sum_window
if __name__=='__main__':
#获整数个数
N=6
#N个整数
P='10 20 30 15 23 12'.split(' ')
#窗口大小
M=3
#判断当前过山车使用情况
max_skip_window_sum=Max_Skip_Window_Sum(P,N,M)
print(max_skip_window_sum)
总结
这个题感觉挺简单的,但有两处易错点,1)判断窗口中的值是应该是小于;2)删除窗口中的值后还需要把当前的值加入到滑动窗口中
3)因为该题只取最大值,所以最大值的存储只需要一个变量就可以了。
引申:如果该题变更下:对滑动窗口中的值排序,求最小值,求排序后相邻值的差的最小值(先排序,再套一层2个值的滑动窗口,最后得到最小差值) ,则将取到的数值放到一个新的列表中即可。后面它想对这个里面的值进行什么处理都没问题
方法:append:列表末尾加一个数
pop:根据索引删除一个数
sum(list):对列表求和
注意:列表元素转int,否则没办法求和