本题考查定长滑动窗口(也可看作双指针):在长度为 n 的数组中,求长度为 k 的连续子数组的最大和。
暴力枚举每个起点再求和是 O(nk)。当 n 达到 106 时会超时。关键观察是:相邻两个窗口只相差一头一尾两个元素,因此可以在 O(1) 时间内从当前窗口转移到下一个窗口。
做法:
小菊和小花是好朋友,他们经常一起玩游戏。这天他们玩一个数字游戏,获胜可以获得对方 1 杯奶茶。
游戏规则:小菊在纸上写了一排数字,小花需要从中选择连续 K 个数字,使得这 K 个数字的和最大。小花正确找到最大的值就算获胜,小菊则提供 1 杯奶茶;小花想获胜喝奶茶,请你帮助她。
取值范围说明:
输出连续 K 个数字的最大和。
输入
[1,3,8,6,4,10],3
输出
20
说明
[1,3,8,6,4,10]:小菊给出的一排数字,数字为整数。3:连续的数字个数 K。20:连续的 3 个数字 [6,4,10] 最大,值是 20题目分析:
3 8 6,得到和为 178 6 4,得到和为 186 4 10,得到和为 2020,因此选择 6 4 10,给出最大值 20,小花才能获胜。输入
[1,2,3,4,5,6,7,8,5,4,3,2,1],4
输出
26
说明
[1,2,3,4,5,6,7,8,5,4,3,2,1]:小菊给出的一排数字,数字为整数。
4:连续的数字个数 K。
26:连续 4 个数 [5,6,7,8] 或 [6,7,8,5],最大值为 26
输入
[1,2,3,4,5,6,7,8,1000000000,100000000],0
输出
0
说明
[1,2,3,4,5,6,7,8,1000000000,100000000]:小菊给出的一排数字,数字为整数。
0:连续的数字个数 K。
0:连续 0 个数字最大值为 0
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.