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;}
有任何問題,歡迎評論區交流,歡迎評論區提供其它解題思路(代碼),也可以點個贊支持一下作者哈😄~