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

【Container With Most Water】cpp

时间:2015-05-30 16:37:24      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:

题目:

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.

代码:

class Solution {
public:
    int maxArea(vector<int>& height) {
            if ( height.size()<2 ) return 0;
            int max_area = 0;
            int left = 0;
            int right = height.size()-1;
            while ( left<right )
            {
                if ( height[left]<=height[right] )
                {
                    max_area = std::max(max_area, (right-left)*height[left]);
                    left++;
                }
                else
                {
                    max_area =  std::max(max_area, (right-left)*height[right]);
                    right--;
                }
            }
            return max_area;
    }
};

tips:

试图用DP去做,但是没想出来;最后无奈落入了Greedy的俗套solution。

这个greedy的思路也是蛮巧的:从两头开始往中间greedy,头尾两个greedy一起变化才得到greedy的条件。

【Container With Most Water】cpp

标签:

原文地址:http://www.cnblogs.com/xbf9xbf/p/4540412.html

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