题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
示例:
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
/**
* @param {number[]} height
* @return {number}
*/
var trap = function(height) {
// 检测边界条件
if(height.length < 3) return 0
// 找到最长的木板
let maxval = -1
let maxValIndex = 0
for(let i=0;i<height.length; i++) {
if( height[i] > maxval) {
maxval = height[i]
maxValIndex = i
}
}
// 根据最长木板,分成左右两个木桶
let res = 0
let left = 0
for(let i=left + 1; i<=maxValIndex; i++) {
if(height[i] < height[left]) {
res += height[left] - height[i]
} else {
left = i
}
}
let right = height.length - 1
for(let i=right - 1; i>=maxValIndex; i--) {
if(height[i] < height[right]) {
res += height[right] - height[i]
} else {
right = i
}
}
return res
};