码迷,mamicode.com
首页 > 其他好文 > 详细

LintCode-装最多水的容器

时间:2015-05-14 20:35:13      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:面试   lintcode   

给定 n 个非负整数 a1, a2, ..., an, 每个数代表了坐标中的一个点 (i, ai)。画 n 条垂直线,使得 i 垂直线的两个端点分别为(i, ai)(i, 0)。找到两条线,使得其与 x 轴共同构成一个容器,以容纳最多水。

样例

给出[1,3,2], 最大的储水面积是2.

注意

容器不可倾斜。


分析:采用两边逼近法,显而易见,当逐渐逼近的时候,容器的长在变短,那么要使得面积增大的话,宽必须要变大,所以我们保留长的那条线段,使得短线段向另一方逐渐逼近。

代码:

class Solution {
public:
    /**
     * @param heights: a vector of integers
     * @return: an integer
     */
    int maxArea(vector<int> &heights) {
        // write your code here
        int ret = 0;
        int r = heights.size()-1;
        int l = 0;
        while (l < r)
        {
            ret = max(ret,min(heights[l],heights[r])*(r-l));
            if(heights[l]<heights[r])
                l++;
            else 
                r--;
        }
        return ret;
    }
};


LintCode-装最多水的容器

标签:面试   lintcode   

原文地址:http://blog.csdn.net/wangyuquanliuli/article/details/45724831

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!