为了账号安全,请及时绑定邮箱和手机立即绑定

算法题:木桶中盛最多的水

标签:
算法

题目描述:

给定n个非负整数a1 a2…, an,其中每一个代表坐标(i, ai)上的一个点。画n条垂直线,使直线i的两个端点分别为(i, ai)和(i, 0),找出两条直线作为木板,与x轴的平面一起构成一个木桶,使木桶中含有最多的水。

题目举例:

输入:[1,8,6,2,5,4,8,3,7]
输出: 49

图片描述

解答办法:

木桶原理,就是木桶中盛的水的多少,受较短的木板所限制。
所以我们取两个指针,一个在数组的开头,一个在数组的末尾,组成了行长度。然后,我们维护一个变量来存储到目前为止获得的最大面积。在每一步中,我们找出它们之间形成的区域,更新这个最大面积,并将指针指向较短的线的另一端移动一步。

代码实现:

class Solution {
    public int maxArea(int[] height) {
        int l=0;
        int r= height.length-1;
        
        int result = 0;
        
        while(l<r){
            result = Math.max(result, Math.min(height[l],height[r])*(r-l));
            
            if(height[l]<height[r]){
                l++;
            }else{
                r--;
            }
        }
        
        return result;
            
    }
}
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消