給定n個非負整數表明每一個柱的寬度的高程圖1,計算下雨後能夠捕集多少水。

/*
     * @param heights: a list of integers
     * @return: a integer
     */
    public static int trapRainWater(int[] heights) {
        // write your code here
        if(heights ==null || heights.length<2) return 0;
        int num =0;
        int length = heights.length;
        int[] leftArray =  new int[length];
        int leftMax = heights[0];
        leftArray[0]=0;
        int[] rightArray = new int[length];
        rightArray[length-1]=0;
        for(int i=1;i<length;i++) {
            leftArray[i]=leftMax;
            if(leftMax<heights[i]) {
                leftMax = heights[i];
            }
        }
        int rightMax = heights[length-1];
        for(int i=length-2;i>=0;i--) {
            rightArray[i]=rightMax;
            int numtmp = Math.min(rightArray[i], leftArray[i])-heights[i];
            if(numtmp>0) num +=numtmp;
            if(rightMax<heights[i]){
                rightMax=heights[i];
            }
        }
        
        return num;
                
    }.net

相關文章
相關標籤/搜索