【华为OD机试】滑动窗口最大和-python

题目

给定一个数组 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,否则没办法求和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值