題目描述
給定 n 個非負整數 a1,a2,...,an,每個數代表座標中的一個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別爲 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。
說明:你不能傾斜容器,且 n 的值至少爲 2。
示例
輸入: [1,8,6,2,5,4,8,3,7]
輸出: 49
基本思路
- 方法一:暴力求解。對於每個矩形,計算它跟其他矩形所圍成的面積,更新最大面積
- 方法二:雙指針。
代碼實現
//方法1,暴力求解
class Solution {
public int maxArea(int[] height) {
int res=0;
int len=height.length;
for(int i=0;i<len;i++){
for(int j=i+1;j<len;j++){
res=Math.max(res,Math.min(height[i],height[j])*(j-i));
}
}
return res;
}
}
//方法2:雙指針
class Solution {
public int maxArea(int[] height) {
int res=0;
int len=height.length;
int i=0;
int j=len-1;
while(i<j){
res=Math.max(res,Math.min(height[i],height[j])*(j-i));
if(height[i]<=height[j]){//每次只移動較小的邊。(因爲面積由嬌小的餓邊所決定,移動較大的邊沒有作用)
i++;
}else{
j--;
}
}
return res;
}
}