题解 | 接雨水问题

接雨水问题

https://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f

import java.util.*;


public class Solution {
    /**
     * 两边就像是两堵墙,能存多少水有较矮的那堵墙决定,高的强起到的作用就是挡水的作用
     * 维护两个指针,同时维护两个最大值,左边和右边的最大值,
     * 如果右边最大值比左边最大值大,左边往右走,同时计算左边最大值,左边最大值与左边当前值的差就是当前位置能存多少水
     * 如果左边最大值比右边最大值大,右边往左走,同时计算右边最大值,右边最大值与右边当前值的差就是当前位置能存多少水
     *
     * @param arr
     * @return
     */
    public long maxWater(int[] arr) {
        if (arr == null || arr.length <= 2) {
            return 0L;
        }
        int left = 0;
        int right = arr.length - 1;
        int maxLeft = 0;
        int maxRight = 0;
        int area = 0;
        while (left < right) {
            maxLeft = Math.max(maxLeft, arr[left]);
            maxRight = Math.max(maxRight, arr[right]);
            if (maxLeft < maxRight) {
                area += maxLeft - arr[left];
                left++;
            } else {
                area += maxRight - arr[right];
                right--;
            }
        }
        return area;
    }
}

全部评论

相关推荐

牛牛不会牛泪:脉脉太多这种了,纯水军
点赞 评论 收藏
分享
10-14 21:00
门头沟学院 Java
吃花椒的狸猫:这个人说的倒是实话,特别是小公司,一个实习生哪里来的那么多要求
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务