var trap = function(height) { const n = height.length; if (n == 0) {//极端情况 return0; }
const leftMax = newArray(n).fill(0);//初始化从左往右看的最大值数组 leftMax[0] = height[0]; for (let i = 1; i < n; ++i) { leftMax[i] = Math.max(leftMax[i - 1], height[i]); }
const rightMax = newArray(n).fill(0);//初始化从右往左看的最大值数组 rightMax[n - 1] = height[n - 1]; for (let i = n - 2; i >= 0; --i) { rightMax[i] = Math.max(rightMax[i + 1], height[i]); }
let ans = 0; //循环数组,每个位置能接的雨水量就是这个位置左右最大值的较小者减去当前的高度 for (let i = 0; i < n; ++i) { ans += Math.min(leftMax[i], rightMax[i]) - height[i]; } return ans; };