1 条题解

  • 0
    @ 2026-1-3 14:20:14

    思路分析

    关键点

    1. 水杯编号:1, 2, 3, ..., n
    2. 固定窗口长度:因为水量都是正数,所以一定选长度为 k+1 的连续水杯。
    3. 滑动窗口
      • 先计算前 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. 窗口 [1,2,3] → 和 = 3 + 1 + 4 = 8
    2. 窗口 [2,3,4] → 和 = 1 + 4 + 2 = 7
    3. 窗口 [3,4,5] → 和 = 4 + 2 + 5 = 11

    最大值 = 11


    代码


    代码解释

    1. 数组下标从 1 开始
      • a[1] 表示第 1 个水杯的水量,a[2] 表示第 2 个水杯的水量,以此类推。
      • 这样写更符合数学公式和题目描述的水杯编号。
    2. 第一个窗口
      • a[1] 加到 a[len]
    3. 滑动窗口
      • 每次窗口右移一位,加入 a[right],减去 a[right - len](窗口最左边的水杯)。
      • 保持窗口长度始终为 k+1
    4. 时间复杂度:O(n),非常高效。

    信息

    ID
    2349
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    (无)
    递交数
    538
    已通过
    183
    上传者