[LeetCode]42. Trapping Rain Water雨水填坑

这个题难点在于无法保证右边是不是有更高的墙可以保证挡住水

双指针可以解决

/*
    两边指针保证,保证另外一边肯定有能挡住水的地方。
    如果从一边开始,不考虑另一边,是无法保证右边肯定有挡水的墙,如果右边只都比这个值小,遍历的时候是不能增加结果的
    双指针每次取较小的一方开始遍历
     */
    public int trap(int[] height) {
        if (height.length<3) return 0;
        int l = 0;
        int r = height.length-1;
        int res = 0;
        while (l<r)
        {
            int min = Math.min(height[l],height[r]);
            if (min==height[l])
            {
                //从左边开始遍历,遇到更高的就退出
                while (++l<r&&height[l]<=min)
                    res+=min-height[l];
            }
            else
            {
                while (l<--r&&height[r]<=min)
                    res+=min-height[r];
            }
        }
        return res;
    }

 

posted @ 2018-02-07 13:26  stAr_1  阅读(211)  评论(0编辑  收藏  举报