描述
给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个柱子高度图,计算按此排列的柱子,下雨之后能接多少雨水。(数组以外的区域高度视为0)
示例
输入:
[3,1,2,5,2,4]
返回值:
5
说明:
数组 [3,1,2,5,2,4] 表示柱子高度图,在这种情况下,可以接 5个单位的雨水,蓝色的为雨水 ,如题面图。
思路与代码
- 1.这个接雨水,其实就是一个木桶效应,首先最大的是边,然后雨水其实就是边的另一边的一些差值
- 2.关键是如何简化这个过程,使用双指针
/**
* max water
* @param arr int整型一维数组 the array
* @return long长整型
*/
function maxWater( arr ) {
// write code here
let l=0,r=arr.length-1,leftmax=0,rightmax=0,ans=0
while(l<=r){
if(arr[l]<arr[r]){
if(arr[l]>leftmax){
leftmax=arr[l]
}else{
ans+=leftmax-arr[l]
}
++l
}else{
if(arr[r]>rightmax){
rightmax=arr[r]
}else{
ans+=rightmax-arr[r]
}
--r
}
}
return ans
}
module.exports = {
maxWater : maxWater
};