Note: You may not slant the container.
分析,维持两个指针,分别从左右向中间收缩,同时计算装水量,然后更新最大装水量。
可以提高效率的技巧是,
如果收缩过程中,碰到的高度还没有之前的高度高,那么计算出来的装水量一定比之前的小,所以可以直接忽略。
public class Solution {
public int maxArea(int[] height) {
int i, j, lh, rh, area, tmp, len=height.length;
lh=height[0];
rh=height[len-1];
area=0;
i=0;
j=len-1;
while(i<j){
tmp=Math.min(lh,rh)*(j-i);
if(tmp > area)
area = tmp;
if(lh<rh){
while(i<j&&height[i]<=lh)
i++;//高度更小的就不在考虑
if(i<j)
lh=height[i];
}else{
while(i<j&&height[j]<=rh)
j--;
if(i<j)
rh=height[j];
}
}
return area;
}
}