码迷,mamicode.com
首页 > 移动开发 > 详细

42. Trapping Rain Water

时间:2016-05-05 11:01:48      阅读:231      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!