LC每日一题|20240509 - 2105. 给植物浇水 II

110 阅读2分钟

LC每日一题|20240509 - 2105. 给植物浇水 II

Alice 和 Bob 打算给花园里的 n 株植物浇水。植物排成一行,从左到右进行标记,编号从 0n - 1 。其中,第 i 株植物的位置是 x = i

每一株植物都需要浇特定量的水。Alice 和 Bob 每人有一个水罐,最初是满的 。他们按下面描述的方式完成浇水:

  •  Alice 按 从左到右 的顺序给植物浇水,从植物 0 开始。Bob 按 从右到左 的顺序给植物浇水,从植物 n - 1 开始。他们 同时 给植物浇水。
  • 如果没有足够的水 完全 浇灌下一株植物,他 / 她会立即重新灌满浇水罐。
  • 不管植物需要多少水,浇水所耗费的时间都是一样的。
  • 不能 提前重新灌满水罐。
  • 每株植物都可以由 Alice 或者 Bob 来浇水。
  • 如果 Alice 和 Bob 到达同一株植物,那么当前水罐中水更多的人会给这株植物浇水。如果他俩水量相同,那么 Alice 会给这株植物浇水。

给你一个下标从 0 开始的整数数组 plants ,数组由 n 个整数组成。其中,plants[i] 为第 i 株植物需要的水量。另有两个整数 capacityA 和 capacityB 分别表示 Alice 和 Bob 水罐的容量。返回两人浇灌所有植物过程中重新灌满水罐的 次数

提示:

  • n == plants.length
  • 1 <= n <= 10^5
  • 1 <= plants[i] <= 10^6
  • max(plants[i]) <= capacityA, capacityB <= 10^9

题目等级:Medium

解题思路

仍然是一道非常简单的翻译题,无需赘述~

AC代码

class Solution {
    fun minimumRefill(plants: IntArray, capacityA: Int, capacityB: Int): Int {
        var curA = capacityA
        var curB = capacityB
        var res = 0
        for (i in 0 until plants.size / 2) {
            val j = plants.size - i - 1
            if (curA < plants[i]) {
                res++
                curA = capacityA
            }
            curA -= plants[i]
            if (curB < plants[j]) {
                res++
                curB = capacityB
            }
            curB -= plants[j]
        }
        if (plants.size % 2 == 1 && curA < plants[plants.size / 2] && curB < plants[plants.size / 2]) res++
        return res
    }
}

时间复杂度:O(n)

空间复杂度:O(1)