题解 | #接雨水问题#

接雨水问题

http://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f

import java.util.*;


public class Solution {
    /**
     * max water
     * @param arr int整型一维数组 the array
     * @return long长整型
     */
    public long maxWater (int[] arr) {
        if(arr.length<=2) return 0;
        // arr :3 1 2 5 2 4
        // lMax:3 3 3 5 5 5
        // rMax:5 5 5 5 4 4
        // max :3 3 3 5 4 4
        // size:0 2 1 0 2 0
        int[] lMax = new int[arr.length]; // 左侧最大高度
        int[] rMax = new int[arr.length]; // 右侧最大高度
        int[] max = new int[arr.length]; // 两侧最大高度
        int[] size = new int[arr.length]; // 可乘的容量

        // 计算左侧最大高度
        int curLMax = arr[0];
        for (int i = 0; i < arr.length; i++) {
            curLMax = Math.max(arr[i], curLMax);
            lMax[i] = curLMax;
        }

        // 计算右侧最大高度
        int curRMax = arr[arr.length-1];
        for (int i = arr.length-1; i >=0; i--) {
            curRMax = Math.max(arr[i], curRMax);
            rMax[i] = curRMax;
        }

        // 计算两侧最大高度
        for (int i = 0; i < arr.length; i++) {
            max[i] = Math.min(lMax[i], rMax[i]);
        }

        // 计算可乘的容量
        for (int i = 0; i < arr.length; i++) {
            size[i] = max[i] - arr[i];
        }

        // 汇总可乘的容量
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += size[i];
        }
        
        return sum;
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务