水位动态变化

容器盛水问题

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

    public static long maxWater(int[] arr) {
        if (arr == null || arr.length <= 2) {
            return 0;
        }
        int left = 0, right = arr.length - 1;
        long sum = 0;
        // 找出左右边界的最小值作为水位高度
        int mark = Math.min(arr[left], arr[right]);
        while (left < right) {
            // 如果左边较低,则左边界向右遍历, 否则右边界向左移动
            if (arr[left] < arr[right]) {
                left++;
                // 如果当前标尺小于水位,则水量累加
                if (arr[left] < mark) {
                    sum += mark - arr[left];
                } else { // 否则,将此标尺和右边边界高度进行比较,找出剩下数组中的新水位
                    mark = Math.min(arr[left], arr[right]);
                }
            } else {
                right--;
                // 同理,如果当前标尺小于水位,则水量累加
                if (arr[right] < mark) {
                    sum += mark - arr[right];
                } else { // 否则,将此标尺和左边界的高度进行比较,找出剩余数组中的新水位
                    mark = Math.min(arr[right], arr[left]);
                }
            }
        }
        return sum;
    }
全部评论
这个方法思路非常清晰,简洁易懂,太强了
点赞 回复 分享
发布于 2021-08-27 11:08
太厉害了。
点赞 回复 分享
发布于 2021-09-09 09:27
为什么可以这么写呢?比如[3,1,2,5,1,2] 第二位的时候明明可以放2的水,但是加了1,但是最终答案却是对的,这是为什么呢
点赞 回复 分享
发布于 2021-09-24 17:32
[4,5,1,3,2]这个输入就不行,要把while语句left < right变成left+1 < right
点赞 回复 分享
发布于 2021-12-16 19:04
恕我直言,你这样显得我很呆(😂)
点赞 回复 分享
发布于 2022-03-15 15:28

相关推荐

小红书 后端开发 总包n+8w+期权
点赞 评论 收藏
分享
评论
56
7
分享
牛客网
牛客企业服务