继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

小强聊架构
关注TA
已关注
手记 40
粉丝 9454
获赞 241

题目描述:

给定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;
            
    }
}
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP