2024-5-9——给植物浇水 II

题目来源

力扣每日一题;题序: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;
 }

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜菜的小彭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值