题目:
给定 n 个⾮负整数,表示宽度为 1 的柱⼦的⾼度,计算按此排列的柱⼦,下⾬之后能接多少⾬⽔。
示例:
输⼊ : [0,1,0,2,1,0,1,3,2,1,2,1]输出 : 6
黑色表示柱子,蓝色表示雨水
要点:
- 储水量 = 水位 - 柱子高度
- 某个柱子的水位 = 左右两侧柱⼦的最⼤值(包括自身高度)中的较⼩值,即 Math.min(左边柱⼦最⼤值, 右边柱⼦最⼤值)
function trap(height) {
let max = 0;
let volume = 0;
const leftMax = [];
const rightMax = [];
for (let i = 0; i < height.length; i++) {
leftMax[i] = max = Math.max(height[i], max);
}
max = 0;
for (let i = height.length - 1; i >= 0; i--) {
rightMax[i] = max = Math.max(height[i], max);
}
for (let i = 0; i < height.length; i++) {
volume = volume + Math.min(leftMax[i], rightMax[i]) - height[i];
}
return volume;
}