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;
        }
    };
  • 相关阅读:
    CentOS下编译搭建LAMP环境
    RabbitMQ消息队列总结
    利用exif.js解决ios手机上传竖拍照片旋转90度问题
    服务器同一个tomcat部署2两个相同的项目
    php curl 转为 x-www-form-urlencoded 方式的坑
    Linux后台运行Java的jar包
    环境隔离与属性替换
    安装与使用adb
    HTTP状态码
    微信小程序官方文档
  • 原文地址:https://www.cnblogs.com/freeopen/p/5482952.html
Copyright © 2011-2022 走看看