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;
}
}
这次终于通过啦

泪目打在公屏上!
时间复杂度太重要了,双指针永远滴神,加油小伙子!
本文介绍了一种利用双指针技术解决经典盛水量问题的方法,对比了暴力破解法与双指针法的不同,并详细阐述了双指针算法的具体实现过程。实践证明,双指针法可以显著提高算法效率。
863

被折叠的 条评论
为什么被折叠?



