题目描述:
给定n个非负整数a1 a2…, an,其中每一个代表坐标(i, ai)上的一个点。画n条垂直线,使直线i的两个端点分别为(i, ai)和(i, 0),找出两条直线作为木板,与x轴的平面一起构成一个木桶,使木桶中含有最多的水。
题目举例:
输入:[1,8,6,2,5,4,8,3,7]
输出: 49
解答办法:
木桶原理,就是木桶中盛的水的多少,受较短的木板所限制。
所以我们取两个指针,一个在数组的开头,一个在数组的末尾,组成了行长度。然后,我们维护一个变量来存储到目前为止获得的最大面积。在每一步中,我们找出它们之间形成的区域,更新这个最大面积,并将指针指向较短的线的另一端移动一步。
代码实现:
class Solution {
public int maxArea(int[] height) {
int l=0;
int r= height.length-1;
int result = 0;
while(l<r){
result = Math.max(result, Math.min(height[l],height[r])*(r-l));
if(height[l]<height[r]){
l++;
}else{
r--;
}
}
return result;
}
}