程序员

力扣 42 接雨水

2020-07-28  本文已影响0人  zhaojinhui

题意:给定 n 个非负整数表示每个宽度为 1 的柱子,计算按此排列的柱子,后能接多少雨水。

思路:设置首尾指针,比较首尾指针,从数字较小的一边开始移动,直到找到大于当前较小数字的数,移动过程中累积积水量,重新比较首尾指针的数,循环以上过程(具体可见代码)

思想:利用数组index来解决问题

复杂度:时间O(n),空间O(1)

class Solution {
    public int trap(int[] height) {
        int res = 0;
        int l = 0;
        int r= height.length - 1;
        while(l<r) {
            // 右边的数小
            if(height[l] >= height[r]) {
                int temp = r;
                // 不停的向左遍历数组,直到找到比当前尾指针数大的数
                while(temp>l && height[temp] <= height[r]) {
                    // 尾指针-当前小的数即为,当前index可积水量
                    res += height[r] - height[temp];
                    temp--;
                }
               // 更新尾指针
                r = temp;
            } else {
               // 首支针类似
                int temp = l;
                while(temp<r && height[temp]<= height[l]) {
                    res += height[l] - height[temp];
                    temp++;
                }
                l = temp;
            }
        }
       // 返回结果
        return res;
    }
}
上一篇下一篇

猜你喜欢

热点阅读