您的位置:首页 > 大数据 > 人工智能

leetcode - Container With Most Water

2015-06-20 20:37 495 查看
题目:

Container With Most Water


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.

参考这里

class Solution {
public:
    int maxArea(vector<int>& height) {
        int size=height.size();
        if(size<=1)
            return -1;
        if(size==2)
            return min(height[0],height[1]);
       
      int capability = 0;
    size_t left = 0, right = height.size() - 1;
    
    while (left < right)
    {
        int water = min(height[left], height[right]) * (right - left);
        
        if (water > capability) 
            capability = water;
        //从小的那一端开始移动
        //由于长度缩小,所以高度要增加。故每次移动,都要移动到比原来值大的数,才有意义
        if (height[left] < height[right])
        {
            int mark=height[left] ;
            ++left;
            while(left < right && height[left]<=mark)
                ++left;
        }
        else
        {
            int mark=height[right] ;
            --right;
            while(left < right && height[right]<=mark)
                --right;
        }
    }
    
    return capability;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: