题目:
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container.
题目解答:
题目中要求得两个纵轴与x轴围起来的容器的最大容积。这里使用两个指针,从头尾两边向中间缩进。不断更新最值。
代码:
class Solution {
public:
int maxArea(vector<int>& height) {
vector<int>::iterator vleft = height.begin();
vector<int>::iterator vright = height.end() - 1;
int res = 0;
while(vleft != vright)
{
// cout << "leftv" <<*vleft <<endl;
//cout << "rightv"<<*vright <<endl;
//cout << "minus" << (vright - vleft) << endl;
res = max(res, min(*vleft, *vright) * (vright - vleft) );
//cout << "res" << res << endl;
if(*vleft < *vright)
{
vector<int>::iterator tmp = vleft;
while( (tmp != vright) && (*tmp <= *vleft) )
{
tmp++;
}
vleft = tmp;
}
else
{
vector<int>::iterator tmp = vright;
while( (tmp != vleft) && (*tmp <= *vright) )
{
tmp--;
}
vright = tmp;
}
}
return res;
}
int max(int a,int b)
{
return a > b ? a : b;
}
int min(int a,int b)
{
return a < b ? a : b;
}
};