1.日常暴力解法的我,捂脸
class Solution {
public int maxArea(int[] height) {
int max=0;
for(int i=0;i<height.length-1;i++){
for(int j=i+1;j<height.length;j++){
max=Math.max(max,water(height[i],i,height[j],j));
}
}
return max;
}
public int water(int a,int i,int b,int j){
if(a>b){
return b*(j-i);
}else{
return a*(j-i);
}
}
}
2.从左右两边的指针开始,假设此时的容量最大,判断这两个指针对应值的大小,小的那个则自增或者自减,在找到比该值大的值的时候停止。因为想让容量变大在宽度变小的同时只有‘高’变大容量才能增大,所以只有移动‘高’较小的指针,才能找出较大的值,这样子,当两个指针指向同一个值时结束,节省了很多不必要的判断,时间复杂度为O(n)。
class Solution {
public int maxArea(int[] height) {
int i=0;
int j=height.length-1;
int max=0;
while(i<j){
int start=height[i];
int end=height[j];
int test=water(start,i,end,j);
max=Math.max(max,test);
if(height[i]<height[j]){
while(i<j&&height[i]<=start){
i++;
}
}else{
while(i<j&&height[j]<=end){
j--;
}
}
}
return max;
}
public int water(int a,int i,int b,int j){
if(a>b){
return b*(j-i);
}else{
return a*(j-i);
}
}
}