本文主要是介绍2024-5-9——给植物浇水 II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2024-5-9
- 题目来源
- 我的题解
- 方法一 双指针
题目来源
力扣每日一题;题序:2105
我的题解
方法一 双指针
使用两个指针t1和t2记录Alice和Bob当前还未浇水的植物,使用变个变量cap1和cap2表示Alice和Bob当前剩余的水量。
两端同时浇水,若不能同时浇水则需要判断哪一个需要回去取水,并将结果加1;
若浇水到两个同时浇一个植物,判断是否其中一人可以浇完,若可以则不再取水;若不可以,则需要判断哪个剩余的水多,剩的多的不再取水,由剩的少的回去取水
时间复杂度:O(n)
空间复杂度:O(1)
public int minimumRefill(int[] plants, int capacityA, int capacityB) {int res=0;int t1=0,t2=plants.length-1;int cap1=capacityA;int cap2=capacityB;while(t1<=t2){//两个都还有足够的水while(t1<=t2&&(cap1>=plants[t1]&&cap2>=plants[t2])){//表示已经把所有植物浇完if(t1==t2){t1++;break;}//Alice足够浇水当前植物cap1-=plants[t1];t1++;//Bob足够浇水当前植物cap2-=plants[t2];t2--;}//还未浇完if(t1<t2){//Alice的水不够if(cap1<plants[t1]){res+=1;cap1=capacityA;}//Bob的水不够if(cap2<plants[t2]){res+=1;cap2=capacityB;}//已经到达同一个位置}else if(t1==t2){//若两个中有其一的能够浇完if(cap1>=plants[t1]||cap2>=plants[t2]){break;}//到达最后一个植物,Alice的水比Bob多或者相同if(cap1>=cap2){plants[t1]-=cap1;cap1=capacityA;//到达最后一个植物,Alice的水比Bob少}else{plants[t2]-=cap2;cap2=capacityB;}res+=1;}}return res;}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~
这篇关于2024-5-9——给植物浇水 II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!