leetcode 42接雨水--双指针

解释一下为什么使用双指针:由官解可以知道就是用最大值减去当前值,但是要注意的是前提条件一定是(从左边到右边走时,右边的最大值一定要大于左边,不然如图中left走到最大值,右边没有他的最大值,则下一个会接到本不该接到的一滴雨水,甚至再下下一个接到了两滴雨水,如果倒数第二个的高度是比他大的话这样写才会不出现问题) 所以判断条件就是左边和右边谁大往谁那边走,交替相向走。

 public int trap(int[] height) {

       int left=0;

       int right=height.length-1;

       int leftmax=0;

       int rightmax=0;

       int ans=0;

      while(left<right){

         leftmax=Math.max(leftmax,height[left]);

         rightmax=Math.max(rightmax,height[right]);

         if(height[left]<height[right]){

            ans+=leftmax-height[left];

            left++;

         }

         else{

            ans+=rightmax-height[right];

            right--;

         }

      }      

      return ans;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值