列表

详情


2079. 给植物浇水

你打算用一个水罐给花园里的 n 株植物浇水。植物排成一行,从左到右进行标记,编号从 0n - 1 。其中,第 i 株植物的位置是 x = ix = -1 处有一条河,你可以在那里重新灌满你的水罐。

每一株植物都需要浇特定量的水。你将会按下面描述的方式完成浇水:

最初,你在河边(也就是,x = -1),在 x 轴上每移动 一个单位 都需要 一步

给你一个下标从 0 开始的整数数组 plants ,数组由 n 个整数组成。其中,plants[i] 为第 i 株植物需要的水量。另有一个整数 capacity 表示水罐的容量,返回浇灌所有植物需要的 步数

 

示例 1:

输入:plants = [2,2,3,3], capacity = 5
输出:14
解释:从河边开始,此时水罐是装满的:
- 走到植物 0 (1 步) ,浇水。水罐中还有 3 单位的水。
- 走到植物 1 (1 步) ,浇水。水罐中还有 1 单位的水。
- 由于不能完全浇灌植物 2 ,回到河边取水 (2 步)。
- 走到植物 2 (3 步) ,浇水。水罐中还有 2 单位的水。
- 由于不能完全浇灌植物 3 ,回到河边取水 (3 步)。
- 走到植物 3 (4 步) ,浇水。
需要的步数是 = 1 + 1 + 2 + 3 + 3 + 4 = 14 。

示例 2:

输入:plants = [1,1,1,4,2,3], capacity = 4
输出:30
解释:从河边开始,此时水罐是装满的:
- 走到植物 0,1,2 (3 步) ,浇水。回到河边取水 (3 步)。
- 走到植物 3 (4 步) ,浇水。回到河边取水 (4 步)。
- 走到植物 4 (5 步) ,浇水。回到河边取水 (5 步)。
- 走到植物 5 (6 步) ,浇水。
需要的步数是 = 3 + 3 + 4 + 4 + 5 + 5 + 6 = 30 。

示例 3:

输入:plants = [7,7,7,7,7,7,7], capacity = 8
输出:49
解释:每次浇水都需要重新灌满水罐。
需要的步数是 = 1 + 1 + 2 + 2 + 3 + 3 + 4 + 4 + 5 + 5 + 6 + 6 + 7 = 49 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int wateringPlants(vector<int>& plants, int capacity) { } };

cpp 解法, 执行用时: 0 ms, 内存消耗: 10.7 MB, 提交时间: 2024-05-08 09:56:55

class Solution {
public:
    int wateringPlants(vector<int>& plants, int capacity) {
        int ans = 0, full = capacity;
        for (int i = 0; i < plants.size(); ++i) {
            int plant = plants[i];
            if (plant <= capacity) {
                ++ans;
                capacity -= plant;
            } else {
                capacity = full - plant;
                ans += i * 2 + 1; // 转换并计算步数
            }
        }
        return ans;
    }
};

php 解法, 执行用时: 18 ms, 内存消耗: 20 MB, 提交时间: 2024-05-08 09:55:41

class Solution {

    /**
     * @param Integer[] $plants
     * @param Integer $capacity
     * @return Integer
     */
    function wateringPlants($plants, $capacity) {
        $ans = 0;
        $full = $capacity;
        foreach ( $plants as $i => $plant ) {
            if ( $plant <= $capacity ) {
                $ans++;
                $capacity -= $plant;
            } else {
                $capacity = $full - $plant;
                $ans += $i * 2 + 1;
            }
        }
        return $ans;
    }
}

java 解法, 执行用时: 0 ms, 内存消耗: 41.3 MB, 提交时间: 2024-05-08 09:53:48

class Solution {
    public int wateringPlants(int[] plants, int capacity) {
        int ans = 0, full = capacity;
        for (int i = 0; i < plants.length; i++) {
            int plant = plants[i];
            if (plant <= capacity) {
                ans++;
                capacity -= plant;
            } else {
                capacity = full - plant;
                ans += i * 2 + 1; // 这里模拟了Python中 i + i + 1 的效果
            }
        }
        return ans;
    }
}

golang 解法, 执行用时: 0 ms, 内存消耗: 2.7 MB, 提交时间: 2024-05-08 09:50:54

func wateringPlants(plants []int, capacity int) int {
	ans, full := 0, capacity
	for i, plant := range plants {
		if plant <= capacity {
			ans++
			capacity -= plant
		} else {
			capacity = full - plant
			ans += i*2 + 1
		}
	}
	return ans
}

python3 解法, 执行用时: 36 ms, 内存消耗: 15 MB, 提交时间: 2022-11-11 11:19:41

class Solution:
    def wateringPlants(self, plants: List[int], capacity: int) -> int:
        ans, full = 0, capacity
        for i, plant in enumerate(plants):
            if plant <= capacity:
                ans += 1
                capacity -= plant
            else:
                capacity = full - plant
                ans += i + i + 1
        return ans

上一题