首页 > 移动平台 > 详细

42. Trapping Rain Water

时间:2016-05-05 10:58:33      阅读:128      评论:0      收藏:0      [点我收藏+]
    /*
     * 从两边各扫描一次得到我们需要维护的变量,通常适用于当前元素需要两边元素来决定的问题------------------------------
     * 42. Trapping Rain Water
     * 12.5 by Mingyang
     * 两个指针,最左边和最右边,分别代表leftmax和rightmax
     * 如果左边小,那么左边指针往右边移,经过的每一个地方再跟leftmax比较得出每一小块积累的水量
     * 注意,没到一个新的点的时A[a]需要与leftmax比谁大,更新leftmax
     */
    public int trap(int[] A){
        int a=0;
        int b=A.length-1;
        int max=0;
        int leftmax=0;
        int rightmax=0;
        while(a<=b){
            leftmax=Math.max(leftmax,A[a]);
            rightmax=Math.max(rightmax,A[b]);
            if(leftmax<rightmax){
                max+=(leftmax-A[a]);       
    // leftmax is smaller than rightmax, so the (leftmax-A[a]) water can be stored
                a++;
            }
            else{
                max+=(rightmax-A[b]);
                b--;
            }
        }
        return max;
    }

 

42. Trapping Rain Water

原文:http://www.cnblogs.com/zmyvszk/p/5460970.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!