• 30-Container With Most Water-Leetcode


    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.

    思路:要找到两根线使得容量最大

    maxArea=min(height(begin),height(end))(endbegin)

    贪心策略

    思考:为什么贪心策略可以获得最优解?
    我们所作的步奏是小的一端向中间紧缩,主要考虑这种策略是否会损失最有解,如下图

    这里写图片描述
    此时end较小,end=end-1,这个步奏是否会遗漏最优解呢,如果是的话
    ,此时最优解以end结尾,但以end结尾的最大面积,也就是(begin,end)
    这个面积我们已经计算过了,所以end = end -1,也就是说较小的一段向中间收缩的时候不会损失最优解,同理两端进行贪心操作是可以找到最优解的。

    class Solution {
    public:
        int maxArea(vector<int>& height) {
            int n = height.size();
            int beg=0,end = n-1;
            int max_area = 0;
            while(beg<end)
            {
                int tmp=min(height[end],height[beg])*(end-beg);
                if(max_area<tmp)max_area = tmp;
                if(height[beg]<height[end]) beg++;
                else end--;
            }
            return max_area;
        }
    };
  • 相关阅读:
    1041. 困于环中的机器人
    95. 不同的二叉搜索树 II
    LeetCode945:使数组唯一的最小增量
    LeetCode:925.长按键入
    LeetCode:926. 将字符串翻转到单调递增
    InteliJ 安装PlantUML插件
    CodeBlock换肤
    正则表达式验证手机号和座机号
    C#中使用反射遍历一个对象属性和值以及百分数
    c#中@的用法
  • 原文地址:https://www.cnblogs.com/freeopen/p/5482952.html
Copyright © 2020-2023  润新知