思路是首尾设置两个游标i,j。
初始情况是宽度最宽,高度是height[i]和height[j]中较矮的一个。
1.从矮的开始出发往中间靠拢,只有中间的柱子比较高时更新max
2.重复1
时间复杂度O(n)
class Solution {
public int maxArea(int[] height) {
if(height.length<2)
return 0;
int i = 0,j = height.length-1;
int max = 0;
while(i!=j){
if(height[i]<=height[j]){
max = Math.max(max,height[i]*(j-i));
int tmp = height[i];
i++;
while(i!=j){
if(height[i]>tmp)
break;
i++;
}
}else{
max = Math.max(max,height[j]*(j-i));
int tmp = height[j];
j--;
while(i!=j){
if(height[j]>tmp)
break;
j--;
}
}
}
return max;
}
}
网友评论