题目
题解
//两个for循环进行计算,时间复杂度高(On^2),无法提交,计算超时。
private static int maxAreaFor(int[] height) {
int maxArea = 0;
for(int i=0;i<height.length;i++){
for(int k=i+1;k<height.length;k++){
int temp = (k-i)*Math.min(height[i],height[k]);
if( temp > maxArea) maxArea = temp;
}
}
return maxArea;
}
//双指针朝中间移动
public static int maxArea(int[] height) {
//双指针位置,0,length-1
int indexMin = 0;
int indexMax = height.length-1;
//最大面积
int maxArea = 0;
//当两个指针重逢时,结束循环
while(indexMax > indexMin){
//temp当前两个指针位置对应的面积,x坐标差值*y坐标最小值
int temp = (indexMax - indexMin ) * Math.min(height[indexMin],height[indexMax]);
//获取最大面积
if(temp > maxArea){
maxArea = temp;
}
//(x,y)y值小的,x向中间移动。
if(height[indexMax] > height[indexMin]){
indexMin++;
}else{
indexMax--;
}
}
return maxArea;
}