题意:给定n个非负整数a1、a2,...,an,画n条竖线,满足第i条线的终点分别为(i,ai)和(i,0)。找出两条线,和x轴形成一个容器,满足装的水最多。
说明:不能倾斜容器。
思路:设选中的两条线分别为i,j(i < j),开口容器形成长方体,容纳的水量为(j-i)*Math.min(xi, xj).
1、穷举法,依次求面积找最大,运行超时,时间复杂度O(n^2)
2、找规律,距离逐渐减小,短边逐渐变大,求出面积最大值 时间复杂度O(n)
public static int maxArea(int[] height) {
if(height == null || height.length == 0)
return 0;
int left = 0, right = height.length - 1;
int max = 0, localArea;
while(left < right){
localArea = right - left;
if(height[left] <= height[right]){//短边决定面积,增大短边
localArea *= height[left];
left++; //减小间距
} else{
localArea *= height[right];
right--;//减小间距
}
if(localArea > max){
max = localArea;
}
}
return max;
}