题解 | #容器盛水问题#

容器盛水问题

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

 public static long maxWater(int[] arr) {
        if (arr.length == 0) {
            return 0;
        }
        int l = 0;
        int r = arr.length - 1;
        long res = 0;
        while (r > l) {
            int tmp = Math.min(arr[r], arr[l]);  // 找到最小的边界 盛水由最小边界决定
            // 找完一个凹槽
            while (r > l && arr[l] <= tmp) { // 边界向中间缩 逐步寻找凹槽
                res += tmp - arr[l];
                l++;
            }

            // 开始找下一个凹槽
            while (r > l && arr[r] <= tmp) { // 边界向中间缩 逐步寻找凹槽
                res += tmp - arr[r];
                r--;
            }
        }
        return res;
    }
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务