42. 接雨水

113 阅读1分钟

42. 接雨水

for (var i = 1; i < n; i++) { 从左到右 选出高个子

for (var i = n - 2; i >= 0; i--) { 从右到左 选出高个子

res += Math.min(arr[i], brr[i]) - crr[i]; 高个子中较小的个子 减去 凹陷的值 就是雨水啦

动态规划

var trap = function (crr) {
    var n = crr.length;
    var arr = new Array(n).fill(0);
    arr[0] = crr[0];
    for (var i = 1; i < n; i++) {
        arr[i] = Math.max(arr[i - 1], crr[i]);
    }
    var brr = new Array(n).fill(0);
    brr[n - 1] = crr[n - 1];
    for (var i = n - 2; i >= 0; i--) {
        brr[i] = Math.max(brr[i + 1], crr[i]);
    }
    var res = 0;
    for (var i = 0; i < n; i++) {
        res += Math.min(arr[i], brr[i]) - crr[i];
    }
    return res;
};

image.png