Trapping Rain Water

2018-10-01  本文已影响0人  BLUE_fdf9

题目
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

答案
maintain i左边最高的bar x,i右边最高的bar y
i位置上有多少水取决于x和y短的那一节
用x或y减去当前i的bar,就知道i能有多少水

class Solution {
    // e.g input: 2 0 2
    public int trap(int[] height) {
        int left = 0, right = height.length - 1, n = height.length;
        int[] leftmax = new int[n], rightmax = new int[n];
        int area = 0;

        // Generate leftmax (leftmax[0] = 0)
        for(int i = 1; i < n; i++) {
            leftmax[i] = Math.max(leftmax[i - 1], height[i - 1]);
        }

        // Generate rightmax
        for(int i = n - 2; i >= 0; i--) {
            rightmax[i] = Math.max(rightmax[i + 1], height[i + 1]);
        }

        // left max:  0 2 2
        // right max: 2 2 0
        for(int i = 0; i < n; i++) {
            int water_level = Math.min(leftmax[i], rightmax[i]);
            if(height[i] >= water_level) continue;
            else area += (water_level - height[i]);
        }

        return area;
    }
}
上一篇下一篇

猜你喜欢

热点阅读