题意:
方法一:
双指针+贪心
思路:双指针,l , r 分别指向左右边界。
class Solution {
public:
int maxArea(vector<int>& height) {
int l=0,r=height.size()-1;
int res=0;
while(l<r){//循环
res=max(res,(r-l)*min(height[l],height[r]));//维护面积的最大值
if(height[l]<height[r]){//移动高度值小的一方
l++;
}else{
r--;
}
}
return res;
}
};
时间复杂度:
空间复杂度:![]()
方法二:
暴力(超时)
思路:暴力,二重循环枚举区间的左右边界。
并维护最大值。
class Solution {
public:
int maxArea(vector<int>& height) {
int n=height.size();
int res=0;
for(int i=0;i<n;i++){//二重循环遍历区间左右边界
for(int j=i+1;j<n;j++){
res=max(res,(j-i)*min(height[i],height[j]));//维护最大值
}
}
return res;
}
};
时间复杂度:
空间复杂度:



京公网安备 11010502036488号