题目描述:
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
方法一:暴力法
遍历每个可能的容器大小,找出其中最大的即可
class Solution {
public int maxArea(int[] height) {
int len=height.length;
int sum=0;
for(int i=0;i<len;i++){
for(int j=i+1;j<len;j++){
int flag=(j-i)*Math.min(height[i],height[j]);
if(flag>sum){
sum=flag;
}
}
}
return sum;
}
}
方法二:双指针法
以l,r表示前后指针,H[l]表示位置l处的高度,r-l是输入的数据长度。Math.min(height[l],height[r])*(r-l)是(l,r)对的面积。
class Solution {
public int maxArea(int[] height) {
int sum=0;
int l=0;
int r=height.length-1;
while(l<r){
sum=Math.max(sum,Math.min(height[l],height[r])*(r-l));
if(height[l]<height[r]){
l++;
}else{
r--;
}
}
return sum;
}
}