題目
給定 n 個非負整數 a1,a2,…,an,每個數代表座標中的一個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別爲 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。
說明:你不能傾斜容器,且 n 的值至少爲 2。
解題思路—雙指針:兩條線與x軸形成的長方形面積,長即爲兩條線在x軸間的距離,寬即爲兩條線中最短的那條。想要形成的面積最大,兩條線間的距離越長越好,最短的那條線越高越好。所以,可以設置雙指針,分別從頭尾開始向內遍歷。如何確定是移動指針left還是right呢?需要比較一下left和right的長度,移動較短的那一根。這雖然會縮小矩形的長,但是有可能會增加矩形的寬。(如果移動較長的那一根,長寬都會減小。)
Java解題—雙指針
class Solution {
public int maxArea(int[] height) {
int left = 0, right = height.length-1;
int max = 0;
while(left<right){
int area = 0;
if(height[left]>height[right]){
area = (right-left)*height[right];
right--;
}else{
area = (right-left)*height[left];
left++;
}
max = max<area?area:max;
}
return max;
}
}