很久之前刷过的题了,双指针法,可能有人会怀疑,这个办法不会漏掉一些情况比较特殊的解吗,诀窍在于每次移动指针都试图不断提高短板,寻找最优解,这个证明起来确实比较抽象,大家有比较清晰的解释欢迎评论,下面是双指针的解法:
public int maxArea(int[] height) {
int begin=0;
int end=height.length-1;
int vol=(end-begin)*getSmaller(height[begin],height[end]);
while(true){
if(height[begin]<height[end]){
begin++;
}else{
end--;
}
if(end>begin){
int volnext=(end-begin)*getSmaller(height[begin],height[end]);
if(volnext>vol){
vol=volnext;
}
}else{
break;
}
}
return vol;
}
private int getSmaller(int a1,int a2){
return a1<a2?a1:a2;
}