老夏学院

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 619|回复: 0

给定一个列表,并有一个长度为k的滑动窗口从列表的最左...

[复制链接]

304

主题

847

帖子

1082

G币

院长

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
1082

院长资深讲师

QQ
发表于 2023-7-17 14:37:09 | 显示全部楼层 |阅读模式
       给定一个列表,并有一个长度为k的滑动窗口从列表的最左侧移动到列表的最右侧,滑动窗口每次只能向右移动一位,计算每次移动中滑动窗口内的最大值

    此题可以采用滑动窗口算法来计算,该算法需要注意有2点,即计算滑动窗口向右滑动的次数和计算滑动窗口内的最大值。
    假设给定一个列表[-3,3,1,-3,2,4,7],设定滑动窗口的长度为3,则每次移动中滑动窗口内的最大值为[3,3,2,4,7],滑动过程如图19-5所示。
滑动过程.png
图1-1 滑动过程
    解析代码如下:
  1. def maxSlidingWindow(lt, size):
  2.     # 滑动窗口长度小于等于0,或者列表长度小于滑动窗口的长度,则返回None
  3.     if size <= 0 or len(lt) < size:
  4.         return None
  5.     # 列表长度
  6.     length = len(lt)
  7.     result = []
  8.     # 滑动窗口向右滑动的次数等于列表长度减去滑动窗口长度再加1
  9.     for i in range(0, length - size + 1):
  10.         # 计算当前滑动窗口内最大的值
  11.         result.append(max(lt[i:i + size]))
  12.     return result
  13. # 滑动窗口长度为3
  14. print(maxSlidingWindow([-3, 3, 1, -3, 2, 4, 7], 3))
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|老夏学院 ( 辽ICP备19020546号-1 )

GMT+8, 2024-5-18 17:25 , Processed in 1.062432 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020.

快速回复 返回顶部 返回列表