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;
}
}