題目描述:
題解:
一、暴力破解(時間複雜度: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)。