zoukankan      html  css  js  c++  java
  • leetcode笔记--水箱问题

    类型的引用:Solution *s=new Solution();

    1.Container With Most Water

    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 and n is at least 2.

    给定一个vector作为纵线的高度输入,选择两条纵线使得他们和X轴一起构成的容器能够盛更多水。

    参考:http://blog.csdn.net/patkritlee/article/details/52453417

    解析:假设最大容器两条纵线为i,j,那么:a.在j的右端没有一条线会比它高!

    b.在i的左端也不会有比它高的线!

    c.所以我们从两头向中间靠拢,同时更新候选值;在收拢区间的时候优先从x,y中较小的边开始收缩;

    代码:

    class Solution {
    public:
        int maxArea(vector<int>& height) {
            int l=0;
        int r=height.size()-1;
        int area=0;
        while(l<r){
            area=max(area,(r-l)*min(height[r],height[l]));

    //查找l,r之间较小的h,从较小的一端开始逼近,找中间比它高的数值。
            if(height[l]<height[r]){
                int k=l;
                while(height[k]<=height[l])
                    k++;
                l=k;
            }
            else{
                int k=r;
                while(height[k]<=height[r])
                    k--;
                r=k;
            }
        }
     
        return area;
        }
    };

  • 相关阅读:
    centos7 安装配置手册
    常用mysql统计信息(mysql5.6)
    yum将需要安装的软件依赖下载到本地
    impala使用指南
    redis集群配置
    VIM
    Vim自动补全插件----YouCompleteMe安装与配置
    vim中自动格式化代码
    vscode_插件_shell格式化工具安装
    Anaconda+vscode 搭建开发环境
  • 原文地址:https://www.cnblogs.com/bananaa/p/7146226.html
Copyright © 2011-2022 走看看