給你 n 個非負整數 a1,a2,...谦屑,an驳糯,每個數代表坐標中的一個點 (i, ai) 。在坐標內畫 n 條垂直線氢橙,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)结窘。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水充蓝。
說明:你不能傾斜容器隧枫,且 n 的值至少為 2。
解題思路:
計算面積是使用較短邊界*兩邊界距離谓苟,所以我們只需要使用雙指針法不斷改變邊界位置即可官脓,
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;
}
復雜度分析
- 時間復雜度:O(N)卑笨,雙指針最多遍歷一次數組就可得到結果
- 空間復雜度:O(1),只需要額外常熟級別空間