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