給定 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)成的容器可以容納最多的水。
說明:你不能傾斜容器,且 n 的值至少為 2。
示例:
輸入: [1,8,6,2,5,4,8,3,7]
輸出: 49
這道題用到了雙指針法。從兩頭向中間逼近,每次移動(dòng)較短的線。
這是因?yàn)椋苿?dòng)較長(zhǎng)的線,可用高度不可能變高,而寬度一定減少,也就是說,總?cè)萘恳欢ㄏ陆怠?br>
而移動(dòng)較短的線,可用高度有可能變高,寬度一定減少,也就是說,有可能使總?cè)萘可仙?/p>
明白這里以后,整道題就很容易了
具體代碼:
class Solution {
public:
int maxArea(vector<int>& height) {
int left = 0;
int max_size = 0;
int right = height.size() - 1;
int high,width;
while(left != right){
high = min(height[left], height[right]);
width = right - left;
max_size = max(high * width, max_size);
if(height[left] > height[right]){
right--;
}
else{
left++;
}
}
return max_size;
}
};