题意分析
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的矩形可以容纳最多的水。
注意:你不能倾斜容器,n 至少是2
比较容易想到的解法,0(n2) 遍历全部
-
o(n)解法 用两个指针从两端开始向中间靠拢,如果左端线段短于右端,那么左端右移,反之右端左移,知道左右两端移到中间重合,记录这个过程中每一次组成木桶的容积,返回其中最大的。class Solution { public int maxArea(int[] height) { int tiji= 0; int max = 0; for(int i=0 ; i<height.length ; i++){ for(int j=1 ; j<height.length ; j++){ tiji= (height[i] < height[j]) ? ((j-i)*height[i]) :((j-i)*height[j]); if(max<tiji){ max=tiji; } } } return max; } }
class Solution {
public int maxArea(int[] height) {
int tiji= 0;
int max = 0;
int low = 0;
int high = height.length - 1;
while(low < high){
tiji = (high - low) * Math.min(height[low], height[high]);
max = (max>tiji) ? (max) :(tiji) ;
if(height[low] < height[high])
low++;
else high--;
}
return max;
}
}