
解释一下为什么使用双指针:由官解可以知道就是用最大值减去当前值,但是要注意的是前提条件一定是(从左边到右边走时,右边的最大值一定要大于左边,不然如图中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;
}
428

被折叠的 条评论
为什么被折叠?



