1.题目描述
2.第一次尝试
暴力破解的,使用两个for,时间复杂度是0(n*n)
class Solution {
public int maxArea(int[] height) {
int sum = 0,min = 0;
for(int i = 0;i<height.length;i++){
for(int j = 1;j<height.length;j++){
if(height[i]<height[j]){
min = height[i];
}else{
min = height[j];
}
sum = Math.max(sum,min*(j-i));
}
}
return sum;
}
}
结果超时了
2.看了解析思路之后继续编码
这次用双指针,降低时间复杂度为哦(n)
class Solution {
public int maxArea(int[] height) {
int i = 0,j= height.length-1,sum = 0,temp = 0;
while(i!=j){
//记录每个情况
temp = Math.min(height[i],height[j])*(j-i);
if(height[i]<height[j]){
i++;
}else{
j--;
}
sum = Math.max(temp,sum);
}
return sum;
}
}
这次终于通过啦
泪目打在公屏上!
时间复杂度太重要了,双指针永远滴神,加油小伙子!