[LeetCode] 42. Trapping Rain Water java

        /**42. Trapping Rain Water 
         * @param height
         * @return 可接水最大量
         */
        public int trap(int[] A) {  
            if (A == null || A.length == 0)  
                return 0;  

            int i, max, total = 0;
            int left[] = new int[A.length];
            int right[] = new int[A.length];  

            // from left to right
            left[0] = A[0];
            max = A[0];
            for (i = 1; i < A.length; i++) {  
                left[i] = Math.max(max, A[i]);
                max = Math.max(max, A[i]);
            }  

            // from right to left
            right[A.length-1] = A[A.length-1];
            max = A[A.length-1];
            for (i = A.length-2; i >= 0; i--) {  
                right[i] = Math.max(max, A[i]);
                max = Math.max(max, A[i]);
            }  

            // trapped water (when i==0, it cannot trapped any water)
            for (i = 1; i < A.length-1; i++) {  
                int bit = Math.min(left[i], right[i]) - A[i];  
                if (bit > 0)  
                    total += bit;  
            }  

            return total;  
        }

分析每个格子的盛水两,然后相加
每个格子盛水量取决了两边高度,而且是左右最高之中最短的板
需要两遍遍历,一个从左到右,找最高的左短板;一个从右到左,找最高的右短板。最后记录下盛水量的总值就是最终结果了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值