zoukankan      html  css  js  c++  java
  • 【Container With Most Water】cpp

    题目:

    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的条件。

    =======================================

    第二次过这道题,这道题题意不清晰:如果选了某两个板子,就当其他板子不存在。

    class Solution {
    public:
        int maxArea(vector<int>& height) {
                int l = 0;
                int r = height.size()-1;
                int ret = 0;
                while ( l<r )
                {
                    if ( height[l]<=height[r] ) 
                    {
                        ret = max(ret, (r-l)*height[l]);
                        l++;
                    }
                    else
                    {    
                        ret = max(ret, (r-l)*height[r]);
                        r--;
                    }
                }
                return ret;
        }
    };
  • 相关阅读:
    jwt手动生成access_token
    python学习-52 XML模块
    python学习-51 shelve模块
    python学习-50 pickle模块
    python学习-49 json模块
    python学习-48 模块2
    python学习-47 random模块
    python学习-46 时间模块
    python学习-45 模块
    python学习-44 程序的解耦 (不是特别懂的,回头在复习)
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4540412.html
Copyright © 2011-2022 走看看