zoukankan      html  css  js  c++  java
  • 42. Trapping Rain Water

    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.

    For example, 
    Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

    public class Solution {
        public int trap(int[] height) {
            if(height == null || height.length == 0 || height.length == 1) return 0;
            //对于每个 i 能盛水的量取决于左右两端高度的最小值  vol[i]=min(left[i],right[i]) - height[i]
            // 遍历两次得到最高右板和最高左板 left[],right[] 在遍历一次计算。
            int left[] =new int[height.length];
            int right[] = new int[height.length];
            
            //得到每个index的右最高板
            left[0] = height[0];
            int maxl = left[0];
            for(int i = 1; i < height.length; i++){
                left[i] = Math.max(maxl, height[i]);
                maxl = Math.max(maxl, height[i]);
            }
            
            //得到每个index的左最高板
            right[height.length-1] = height[height.length-1];
            int maxr = height[height.length-1];
            for(int i = height.length-2 ; i>=0; i--){
                right[i] = Math.max(maxr, height[i]);
                maxr = Math.max(maxr, height[i]);
            }
            
            int vol = 0;
            for(int i = 1 ; i < height.length-1 ; i++){
                int bit = Math.min(left[i], right[i]) - height[i];
                if(bit > 0) vol += bit;
            }
            return vol;
        }
    }
  • 相关阅读:
    快速幂 快速乘法
    扩展欧几里得学习笔记
    求逆序数数目(树状数组+离散化)
    隐式图的遍历
    随机数生成
    推倒重来
    动态规划初步
    子集生成
    东大oj1155 等凹函数
    P1278 单词游戏
  • 原文地址:https://www.cnblogs.com/joannacode/p/6127906.html
Copyright © 2011-2022 走看看