美文网首页程序员
力扣 42 接雨水

力扣 42 接雨水

作者: zhaojinhui | 来源:发表于2020-07-28 11:38 被阅读0次

    题意:给定 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;
        }
    }
    

    相关文章

      网友评论

        本文标题:力扣 42 接雨水

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