题目描述
题目分析
本质就是从数组中选2个进行枚举
法一:全部罗列n(n-1)/2
法二:双指针法
要想降低复杂度,最本质的一定是减少需要枚举的个数
要想减小枚举的个数就必须利用已知条件抛弃一部分组合
使用双指针逐渐缩小长度,抛弃未使用过的边和已使用边的组合
未使用的边和已使用的边构成的面积一定小于已使用边所记录过的长度(这是个难点)
因为之前纪录时的长度>现在假设情况的长度
所以可以抛弃未使用边和已使用边的组合情况
代码
public int maxArea(int[] height) {
int len=height.length;
int maxArea=0;
int l=0;
int r=len-1;
for(int i=0;i<len-1;i++)
{
int area=Math.min(height[l], height[r])*(r-l);
maxArea=Math.max(maxArea, area);
if(height[l]<height[r])
{
l++;
}
else
{
r--;
}
}
return maxArea;
}