盛最多水的容器
題目敘述:
給定 n 個(gè)非負(fù)整數(shù) a1是整,a2肖揣,...,an浮入,每個(gè)數(shù)代表坐標(biāo)中的一個(gè)點(diǎn) (i, ai) 龙优。在坐標(biāo)內(nèi)畫 n 條垂直線,垂直線 i 的兩個(gè)端點(diǎn)分別為 (i, ai) 和 (i, 0)舵盈。找出其中的兩條線陋率,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水。
示意圖
圖中垂直線代表輸入數(shù)組 [1,8,6,2,5,4,8,3,7]秽晚。在此情況下瓦糟,容器能夠容納水(表示為藍(lán)色部分)的最大值為 49。
示例:
輸入: [1,8,6,2,5,4,8,3,7]
輸出: 49
說明:
你不能傾斜容器赴蝇,且 n 的值至少為 2菩浙。
解題思路:
由題意我們可以將這個(gè)題轉(zhuǎn)換一下思路,就相當(dāng)于去求兩個(gè)數(shù)的下標(biāo)之差與他們中的最小值的乘積中的最大值句伶,我們可以從兩邊開始向中間靠攏劲蜻,來控制我們的下標(biāo)之差在逐漸減小,因此考余,我們每次將高度變高才有可能比原來的大先嬉,所以每次將低的向中間靠直到相遇,時(shí)間復(fù)雜度為O(n);
代碼實(shí)現(xiàn):
public class Solution {
public int maxArea(int[] height) {
int maxarea = 0, l = 0, r = height.length - 1;
while (l < r) {
maxarea = Math.max(maxarea, Math.min(height[l], height[r]) * (r - l));
if (height[l] < height[r])
l++;
else
r--;
}
return maxarea;
}
}