Leetcode题目:Container With Most Water

题目:

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) 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;
    }
};

  

posted @ 2016-06-14 11:26  CodingGirl121  阅读(91)  评论(0编辑  收藏  举报