給定 n 個非負(fù)整數(shù) a1翔怎,a2,...杨耙,an赤套,每個數(shù)代表坐標(biāo)中的一個點(diǎn) (i, ai) 。在坐標(biāo)內(nèi)畫 n 條垂直線珊膜,垂直線 i 的兩個端點(diǎn)分別為 (i, ai) 和 (i, 0)容握。找出其中的兩條線,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水车柠。
說明:你不能傾斜容器剔氏,且 n 的值至少為 2。
示例:
輸入: [1,8,6,2,5,4,8,3,7]
輸出: 49
這道題用到了雙指針法竹祷。從兩頭向中間逼近谈跛,每次移動較短的線。
這是因?yàn)樗芰辏苿虞^長的線感憾,可用高度不可能變高,而寬度一定減少令花,也就是說阻桅,總?cè)萘恳欢ㄏ陆怠?br>
而移動較短的線,可用高度有可能變高彭则,寬度一定減少鳍刷,也就是說,有可能使總?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;
}
};