这道题是给了一大堆的高度,然后宽度为两个高度之间编号之差, 利用水桶定理求面积即可。
所以先定义左右指针,左指针指向0,右指针指向array.length-1, 然后往中间夹逼即可。
定理一: 短板定理 Area=Math.min(left, right)*(right-left)
定理二; 改善定理 当left<right时,短板一定在左边,只有移动左指针才有可能改善面积
当left>right时,短板一定在右边,只有移动右指针才有可能改善面积
面积公式如下:
width=right-left
height=Math.min(Height[left], Height[right])
area=width*height
直接上代码
public int maxArea(int[] height) {
int area = 0;
int left = 0;
int right = height.length - 1;
while (left < right) {
int currHeight = Math.min(height[left], height[right]);
area = Math.max(area, (right - left) * currHeight);
if (height[left] < height[right])
left++;
else
right--;
}
return area;
}