Problem: 2079. 给植物浇水
思路
读完题的第一想法就是模拟,直接按照题意敲就可以了嗷
解题方法
假设水壶中的水量为 cur
,定义一个 count
变量用于记录浇水过程中的步数,那么在整个过程无非就是两种情况:
cur
>=plants[i]
:这个时候只需用水壶中的水浇植物水壶中的水减少,然后步数count + 1
来到下一株植物。cur
<plants[i]
:这个时候水壶中的水不够浇植物了,就需要返回到河边重新装满水,在此过程中行走的距离为2 * i
,然后继续那株植物的浇水。
复杂度
时间复杂度:
因为这里只有一次遍历,所以时间复杂度: O ( n ) O(n) O(n)
空间复杂度:
这里只用了额外的几个变量,所以空间复杂度: O ( 1 ) O(1) O(1)
C++代码
class Solution {
public:
int wateringPlants(vector<int>& plants, int capacity) {
int n = plants.size(), count = 0, cur = capacity;
for(int i = 0; i < n;) { // 一次遍历来给每一株植物浇水
if(cur >= plants[i]) // 如果水壶中的水足够给当前植物浇水
{
cur -= plants[i]; // 水壶中的水减少
i++; // 来到下一株植物处
count++; // 走过的步数加一
}
else
{
cur = capacity; // 重新装满水
count += (2 * i);// 计算重新装水过程中走过的步数
}
}
return count; //返回最后结果
}
};
java代码
class Solution {
public int wateringPlants(int[] plants, int capacity) {
int n = plants.length, count = 0, cur = capacity;
for(int i = 0; i < n;) { // 一次遍历来给每一株植物浇水
if(cur >= plants[i]) // 如果水壶中的水足够给当前植物浇水
{
cur -= plants[i]; // 水壶中的水减少
i++; // 来到下一株植物处
count++; // 走过的步数加一
}
else
{
cur = capacity; // 重新装满水
count += (2 * i); // 计算重新装水过程中走过的步数
}
}
return count; // 返回最后结果
}
}