给定 n 个非负整数 a1, a2, …, an, 每个数代表了坐标中的一个点 (i, ai)。画 n 条垂直线,使得 i 垂直线的两个端点分别为(i, ai)和(i, 0)。找到两条线,使得其与 x 轴共同构成一个容器,以容纳最多水。
注意事项:
容器不可倾斜。
样例:
给出[1,3,2], 最大的储水面积是2.
#ifndef C383_H
#define C383_H
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
/*
* @param heights: a vector of integers
* @return: an integer
*/
int maxArea(vector<int> &heights) {
// write your code here
int len = heights.size();
if (len <= 1)
return 0;
int l = 0, r = len - 1;
int num = 0;
while (l < r)
{
num = maxVal(num, (r - l)*minVal(heights[l], heights[r]));
if (heights[l]>heights[r])
r--;
else
l++;
}
return num;
}
int maxVal(int a, int b)
{
return a>b?a:b;
}
int minVal(int a, int b)
{
return a < b ? a : b;
}
};
#endif