数组和滑动窗口
Description
给定一个整型数组arr和一个大小为w的窗口,窗口从数组最左边滑动到最右边,每次向右滑动一个位置,求出每一次滑动时窗口内最大元素的和。
Input
输入第一行为用例个数, 每个测试用例输入的第一行为数组,每一个元素使用空格隔开;第二行为窗口大小。
Output
输出每个测试用例结果。
Sample Input
1
4 3 5 4 3 3 6 7
3
Sample Output
32
Python3
# 数组与窗口
# 题目要求出每次滑动后窗口中的最大值,最终把所有最大值求和。
# 暴力解法:由于是求最大值,所以并不需要每次滑动都重新构建窗口,
# 只有当最大值滑出窗口时,才需要重新构建窗口(此时是为了重新求得最大值)
nums = int(input())
for n in range(nums):
arr = list(map(int, input().split())) # 输入数组
w_len = int(input()) # 输入窗口大小
wins = [arr[x] for x in range(w_len)] # 初始化窗口
maxNum = max(wins) # 获得窗口中最大值
maxIndex = wins.index(maxNum) # 最大值在窗口中的下标
result = maxNum
# 循环滑动窗口直到数组,每次滑动,最大值在窗口的下标就会-1,此时需判断最大值是否已经脱离窗口,如果脱离,就重新构建窗口并获得最大值及其下标
# 每次滑动会获得一个新的数组值,此时比较新值与最大值的大小,若新值>最大值,则替换之,否则继续滑动
# 主要思想是,由于只是求最大值,因此无需每次都重新构建窗口,只有当最大值脱离窗口时,才需要重新构建窗口(此时作用是重新求得最大值)
for i in range(1, len(