题解 | #盛水最多的容器#

盛水最多的容器

http://www.nowcoder.com/practice/3d8d6a8e516e4633a2244d2934e5aa47

java版——双指针
容量是由最小的那个边决定的,即

area = min(height[legt], height[right]) * (right - left)

然后我们每次移动较小的边,比如, height[left] < height[right] ,那我们就让 left++
为什么呢? 因为如果我们移动较大的边,那么移动后得到的容量一定会比现在小。即使较大边移动后遇到更大的边,但是容量是由较小边决定的,即容器的高度还是 height[left] ,但是宽度却变小了。所以移动较大边必不可能得到一个更大的容器,而移动较小边是有可能得到一个更大的容器的。



public class Solution {

    public int maxArea (int[] height) {
        int left = 0;
        int right = height.length - 1;
        int maxVal = 0;
        while(left < right){
            int area = Math.min(height[left], height[right]) * (right - left);
            maxVal = Math.max(maxVal, area);
            if(height[left] < height[right]){
                left++;
            }else{
                right--;
            }
        }
        return maxVal;
    }
}
全部评论

相关推荐

头像
11-27 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
我是小红是我:学校换成中南
点赞 评论 收藏
分享
拒绝无效加班的小师弟很中意你:求职意向没有,年龄、课程冗余信息可以删掉,需要提升项目经历。排版需要修改。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务