水位动态变化

容器盛水问题

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;
    }
全部评论
恕我直言,你这样显得我很呆(😂)
点赞 回复 分享
发布于 2022-03-15 15:28
[4,5,1,3,2]这个输入就不行,要把while语句left < right变成left+1 < right
点赞 回复 分享
发布于 2021-12-16 19:04
为什么可以这么写呢?比如[3,1,2,5,1,2] 第二位的时候明明可以放2的水,但是加了1,但是最终答案却是对的,这是为什么呢
点赞 回复 分享
发布于 2021-09-24 17:32
太厉害了。
点赞 回复 分享
发布于 2021-09-09 09:27
这个方法思路非常清晰,简洁易懂,太强了
点赞 回复 分享
发布于 2021-08-27 11:08

相关推荐

92Y:泡成巨人观了吧
投递百度等公司10个岗位
点赞 评论 收藏
分享
10-13 22:56
门头沟学院 C++
rt,鼠鼠的浪潮网签明天过期,鼠鼠是山东人,好像自己也能接受。之前的面试大厂基本挂干净了,剩下小米二面后在泡,问了下面试官没有挂,但要泡。还有海信似乎也通过了,不过在深圳,鼠鼠也不是很想去。其它还有一些公司应该陆陆续续还有一些面试,现在有些纠结是直接签了还是再等再面呢?大佬们能不能给鼠鼠提一些意见,万分感谢!!!
牛客78696106...:浪潮可不是开摆,当初我还是开发的时候我组长跟我说他们组有段时间天天1,2点走,早上5点就来,全组肝出来心肌炎,浪潮挣钱省立花可不是说说,当然也看部门,但是浪潮普遍就那dio样,而且你算下时薪就知道不高,没事也是9点半走,不然算你旷工
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
评论
56
7
分享

创作者周榜

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