Leecode container-with-most-water

依然范特西╮ 提交于 2020-03-10 00:19:53

题目描述

给定n个非负整数a1,a2,…,an,其中每个数字表示坐标(i, ai)处的一个点。以(i,ai)和(i,0)(i=1,2,3…n)为端点画出n条直线。你可以从中选择两条线与x轴一起构成一个容器,最大的容器能装多少水?
注意:你不能倾斜容器

分析

  • 设置左右指针,容积是下标只差和两指针中最小的高度乘积。初始时,左右指针分别指向最小和最大的端点。计算初始的容积。
  • 因为随着指针的移动,宽度肯定会变小,而影响容积的是最矮的一边,短板效应。所以如果移动高的一方指针,一方面宽度会变小,另一方面短板不会改变,所以容积只会变小。所以,移动短板的指针,可能会使容积变大,直到左右指针重合,这时会找到最大的容积。

java 代码

public class Solution {
    public int maxArea(int[] height) {
        if(height == null || height.length <2){
            return 0;
        }
        int left = 0;
        int right = height.length - 1;
        int area = 0;        
        while(left < right){
            area = Math.max(area,(right - left)*Math.min(height[left],height[right]));
            if(height[left] < height[right]){
                left ++ ;
            }else{
                right --;
            }
        }        
        return area;
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!