zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    1002. 查找常用字符
    1047. 删除字符串中的所有相邻重复项
    3. 无重复字符的最长子串
    剑指 Offer 57
    239. 滑动窗口最大值
    476. 数字的补数
    876. 链表的中间结点
    973. 最接近原点的 K 个点
    面试题 02.04. 分割链表
    1616. 分割两个字符串得到回文串
  • 原文地址:https://www.cnblogs.com/freeopen/p/5482952.html
Copyright © 2011-2022 走看看