题解 | #接雨水问题#
接雨水问题
http://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f
/**
* max water
* @param arr int整型一维数组 the array
* @return long长整型
*/
//双指针
//某一列能接的雨水量。取决于 左边最高和右边最高 中较小的那个减去当前列的高度
function maxWater( arr ) {
let leftMax=0,rightMax=0;
let left=0,right=arr.length-1;
let res=0;
while(left<right){
leftMax=Math.max(leftMax,arr[left]);//每开始一个循环就要更新最大值
rightMax=Math.max(rightMax,arr[right]);
if(arr[left]<arr[right]){//left<right可以推出leftMax<rightMax
res+=leftMax-arr[left];//雨水等于较小的那个Max减去当前高度
left++;
}
else{
res+=rightMax-arr[right];//此时较小的那个就是rightMax
right--;
}
}
return res;
}
module.exports = {
maxWater : maxWater
};