题解:
暴力搜索法,时间复杂度 O(n²),空间复杂度 O(1)。
class Solution {
public:
int maxArea(vector<int>& height) {
int maxV = 0;
for(int i = 0; i < height.size(); i++){
for(int j = i + 1; j < height.size(); j++){
maxV = max(min(height[i], height[j]) * (j - i), maxV);
}
}
return maxV;
}
};
双指针法,使用两个指针分别指向首尾,如果面积大,则保存,同时将低的一端的指针向内部移动,因为低的对当前需水量影响小。时间复杂度 O(n),空间复杂度 O(1)。
class Solution {
public:
int maxArea(vector<int>& height) {
int maxV = 0;
int i = 0, j = height.size() - 1;
while(i < j){
maxV = max(min(height[i], height[j]) * (j - i), maxV);
if(height[i] < height[j]){
i++;
}
else{
j--;
}
}
return maxV;
}
};