题目描述:
题解:
一、暴力破解(时间复杂度:O(n2), 空间复杂度:O(1))
BF方法的思路简单,两层循环,遍历所有可能性,找出其中最大的。不作赘述。
二、双指针
使用双指针,一个指头,一个指尾,面积=较短的高度*两者间距,短的一侧向中间移动,直至两指针重合。
代码:
int maxArea(vector<int>& height) {
int res = 0;
int i = 0;
int j = height.size() - 1;
while (i < j) {
int area = (j - i) * min(height[i], height[j]);
res = max(res, area);
if (height[i] < height[j]) {
i++;
}
else {
j--;
}
}
return res;
}
复杂度分析:遍历一遍,时间复杂度O(n);只创建了几个局部变量,空间复杂度O(1)。