美文网首页
42. Trapping Rain Water

42. Trapping Rain Water

作者: 夏臻Rock | 来源:发表于2017-12-26 17:09 被阅读0次
    题目.png
    解析:

    还是最大容水量问题,这道题目是做完11题后,leetcode自己推荐给我的,以后准备就按照它的例题推荐来做一道,用以巩固自己的知识点。

    思路:

    同11题,这道也考虑用左右两个位置来标记。

    判断左边和右边两个数的大小,如果左边比右边低,将左位置的高度记为minh,并将左位置右移,右移过程中遇到比minh还低时,则通过减法得到容量并计入总容量;如果右边比左边低,那么同上执行右位置左移。更新左/右位置,重新执行上述过程,直到左右相逢。

    时间复杂度:O(N),遍历了整个数组

    空间复杂度:O(1)

    算法:
    class Solution {
        public int trap(int[] height) {
            int n = height.length;
            int res = 0, l = 0, r = n - 1; 
             while(l < r) {
                 int minh = Math.min(height[l], height[r]);
                 if(height[l] == minh)
                 //++l表示在执行比较前,先对l进行自增计算。不论while的判断是否为真,l都进行了自增。
                     while(++ l < r && height[l] < minh)
                        res += minh - height[l];
                 else
                     while(l < -- r && height[r] < minh)
                         res += minh - height[r];
             } 
            return res;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:42. Trapping Rain Water

          本文链接:https://www.haomeiwen.com/subject/cusjgxtx.html