【LeetCode】11. 盛最多水的容器
阿新 • • 發佈:2018-11-10
題目連結:https://leetcode-cn.com/problems/container-with-most-water/description/
題目描述
給定 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,8,6,2,5,4,8,3,7]
輸出: 49
解決方法
有兩種方法:一是暴力列舉,二是用雙指標
// class Solution {
// public:
// int maxArea(vector<int>& height) {
// //方法1:暴力列舉
// if (height.size()==2) return min(height[0],height[1]);
// int result=INT_MIN;
// for (int i=0;i<height.size();i++)
// for (int j=height.size()-1;j>=0;j--){
// if (i>=j) break;
// result=max(result,(j-i)*min(height[i],height[j]))
// }
// return result;
// }
// };
class Solution {
public:
int maxArea(vector<int>& height) {
//方法2:雙指標
if (height.size()==2) return min(height[0],height[1]);
int result=INT_MIN;
int left=0,right=height.size()-1;
while(left<right){
result=max(result,(right-left)*min(height[left],height[right]));
if (height[left]<height[right]) left++;
else right--;
}
return result;
}
};