42. 接雨水
本题你会发现我要是能直接把 当前位置最进 左面成下将趋势最高的 到右面下降趋势前最高的 找到这两个最小的然后在减去当前位置的高度是不是就是存水量呢
从左到又记录为a1 a2 a3
Min(a1,a3)-a2就是当前能存水的最大高度
我每个要是都能这样是不是很好呢
let { length } = height;
let leftMax = [];
let rightMax = [];
let total = 0
//这里要从左往右面找 前一个比后一个高的
for (let i = 0; i < length; i++) {
if (i == 0) {
leftMax[i] = height[i]
} else {
leftMax[i] = Math.max(leftMax[i - 1], height[i])
}
}
//这里要从右往左找同理 找后一个比前一个大的
for (let i = length - 1; i >= 0; i--) {
if (i == length - 1) {
rightMax[i] = height[i]
} else {
rightMax[i] = Math.max(rightMax[i + 1], height[i])
}
}
//Min(a1,a3)-a2就是当前能存水的最大高度 然后进行求出可以累计的水量
for (let i = 0; i < length; i++) {
var min = Math.min(rightMax[i], leftMax[i])
var result = min - height[i]
if (result > 0) {
total += result
}
}
return total
};