题目:
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; } };