42. Trapping Rain Water

42. Trapping Rain Water_第1张图片
题目.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)