首页 > 代码库 > Container With Most Water

Container With Most Water

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container.

O(n^2)解法超时

public class Solution {
    public int maxArea(int[] height) {
        int area=0,newarea=0;
        int n=height.length;
        for(int i=0;i<n-1;i++){
            for(int j=i+1;j<n;j++){
                int minHeight=Math.min(height[i],height[j]);
                int width=height[j]-height[i];
                newarea=minHeight*width;
                if(area<newarea){
                    area=newarea;
                }
            }
        }
        return area;
    }
}

O(n)解法OK

public class Solution {
    public int maxArea(int[] height) {
        int result=0;
        int n=height.length;
        int low=0,high=n-1;
        while(low<high){
            int area=Math.min(height[high],height[low])*(high-low);
            if(result<area) result=area;
            if(height[high]>height[low]) low++;
            else high--;
        }
        return result;
    }
}