题目描述:
给定n个非负整数a1,a2,…,an,其中每个数字表示坐标(i, ai)处的一个点。以(i,ai)和(i,0)(i=1,2,3...n)为端点画出n条直线。你可以从中选择两条线与x轴一起构成一个容器,最大的容器能装多少水?
注意:你不能倾斜容器
解题思路:
- 此类求极值的问题一般都是从哪一个点出发一次遍历
- 在遍历的过程中求出结果并将结果与已存储的值进行比较,迭代
代码如下:
public int maxArea(int[] height) {
if(height == null || height.length == 0) return 0;
int left = 0;
int right = height.length - 1;
int sum = 0;
// 从两端开始遍历,求出当前的结果值
while(left < right){
int area = (right - left) * Math.min(height[left],height[right]);
sum = Math.max(area, sum);
// 对下标进行迭代,替换较小的数
if(height[left] < height[right]){
left++;
}else
{
right--;
}
}
return sum;
}