給你 n 個非負整數(shù) a1,a2,...,an,每個數(shù)代表坐標中的一個點 (i, ai) 。在坐標內(nèi)畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水。
說明:你不能傾斜容器,且 n 的值至少為 2。
image.png
解題思路:
計算面積是使用較短邊界*兩邊界距離,所以我們只需要使用雙指針法不斷改變邊界位置即可,
l代表從左開始,r代表從右開始。
代碼:
public int findMaxArea(int[] height) {
int l = 0;
int r = height.length - 1;
int maxArea = 0;
while (l < r) {
int area = Math.min(height[l], height[r]) * (r - l);
maxArea = Math.max(area, maxArea);
if (height[l] <= height[r]) {
l++;
} else {
r--;
}
}
return maxArea;
}
復(fù)雜度分析
- 時間復(fù)雜度:O(N),雙指針最多遍歷一次數(shù)組就可得到結(jié)果
- 空間復(fù)雜度:O(1),只需要額外常熟級別空間