1 条题解
-
0
思路分析
关键点
- 水杯编号:1, 2, 3, ..., n
- 固定窗口长度:因为水量都是正数,所以一定选长度为
k+1的连续水杯。 - 滑动窗口:
- 先计算前
k+1个水杯的和。 - 然后窗口向右滑动,每次去掉最左边的水杯,加入右边新的水杯。
- 始终保持窗口长度为
k+1。
- 先计算前
固定长度滑动窗口
假设:
n = 5, k = 2 a = [0, 3, 1, 4, 2, 5] // a[0] 不用,a[1]~a[5] 存水杯水量固定窗口长度
len = k+1 = 3动画过程
- 窗口 [1,2,3] → 和 = 3 + 1 + 4 = 8
- 窗口 [2,3,4] → 和 = 1 + 4 + 2 = 7
- 窗口 [3,4,5] → 和 = 4 + 2 + 5 = 11
最大值 = 11
代码

代码解释
- 数组下标从 1 开始:
a[1]表示第 1 个水杯的水量,a[2]表示第 2 个水杯的水量,以此类推。- 这样写更符合数学公式和题目描述的水杯编号。
- 第一个窗口:
- 从
a[1]加到a[len]。
- 从
- 滑动窗口:
- 每次窗口右移一位,加入
a[right],减去a[right - len](窗口最左边的水杯)。 - 保持窗口长度始终为
k+1。
- 每次窗口右移一位,加入
- 时间复杂度:O(n),非常高效。
信息
- ID
- 2349
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 538
- 已通过
- 183
- 上传者