有两种做法,一种O(n^2),一种O(n)
提交代码O(n^2)
class Solution {
public int maxArea(int[] height) {
int maxLeft=0,maxRight=0,curArea=0,maxArea=0;
for(int i=0;i<height.length;i++) {
if(height[i]<maxLeft) continue;
maxLeft=height[i];
maxRight=0;
for(int j=height.length-1;j>i;j--) {
if(height[j]<maxRight) continue;
maxRight=height[j];
curArea=Math.min(height[i], height[j])*(j-i);
maxArea=curArea>maxArea?curArea:maxArea;
}
}
return maxArea;
}
}
运行结果

提交代码O(n)
class Solution{
public int maxArea(int[] height) {
int curArea,maxArea=0;
int i=0,j=height.length-1;
while(i<j) {
curArea=Math.min(height[i],height[j])*(j-i);
maxArea=curArea>maxArea?curArea:maxArea;
if(height[i]<height[j]) i++;
else j--;
}
return maxArea;
}
}
运行结果

本文介绍了解决最大面积容器问题的两种算法实现,一种为O(n^2)的时间复杂度,另一种为更高效的O(n)时间复杂度。通过对比两种算法的代码实现,详细解释了如何在给定的高度数组中找到能够容纳最多水的两个边界的解决方案。
655

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



