2024-5-8
- 题目来源
- 我的题解
- 方法一 模拟
题目来源
力扣每日一题;题序:2079
我的题解
方法一 模拟
依次模拟浇水动作
使用一个变量 cap维护剩余的水量,使用t作为还未浇水的树的下标。当从第 i−1株植物到达第 i株植物时:
- 如果 cap≥plants[i],那么可以完成浇水,需要的步数就是从 i−1 到 i 的 1 步,总步数加1;
- 如果 rest<plants[i],那么无法完成浇水,必须要返回河边装满水罐,需要的步数为:2*t。
依次模拟遍历
当模拟完成所有 n 株植物的浇水过程之后,就可以返回总步数作为答案。
时间复杂度:O(n)
空间复杂度:O(1)
public int wateringPlants(int[] plants, int capacity) {int res=0;//最红结果int t=0;//已经当前还未浇水的树的位置int cap=capacity;//剩余水量while(t<plants.length){// 当还够浇水while(t<plants.length&&cap>=plants[t]){cap-=plants[t];t++;res+=1;}//只要还未浇完水,需要返回取水,来回两次的距离if(t!=plants.length){res+=2*t;cap=capacity;} }return res;}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~