首页 > 其他分享 >5.盛最多水的容器

5.盛最多水的容器

时间:2023-11-03 15:35:28浏览次数:24  
标签:容器 min int res height 枚举 最多水 柱子

题目概述:给定一些柱子的高度,规定两根柱子之间所能围成的面积(以两者中较短的一根的高度作为矩形的高)。问这些柱子中所能围成的最大面积
解题思路1:很明显,水量=(j - i) * min(height[i],height[j]);
当j从后往前枚举有一个特性:当height[j] >= height[i]时就可以不用再枚举了,因为
此时min(height[i],height[j])已经达到了最大:height[i],如果继续枚举j-i减小
显然不是答案
时间复杂度:\(O(n^2)\),但由于我们有一个优化,以及leetcode数据没有设置边界数据,ac了
代码

class Solution {
    public int maxArea(int[] height) {
        int n = height.length;
        //水量=(j - i) * min(height[i],height[j]);
        //j从后往前枚举有一个特性:当height[j] >= height[i]时就可以不用再枚举了,因为
        //此时min(height[i],height[j])已经达到了最大:height[i],如果继续枚举j-i减小
        //显然不是答案
        int res = 0;
        for(int i = 0; i < n; i ++){
            int ma = 0;
            for(int j = n - 1; j > i; j --){
                ma = Math.max(ma,(j - i) * Math.min(height[i],height[j]));
                if(height[j] >= height[i])break;
            }

            res = Math.max(res,ma);
        }
        return res;
    }
}

解题思路2:对上述代码继续进行优化。上述代码存在的缺陷在于,当j所指向的柱子高度不小于i所指向的柱子高度时,j又置为n-1.这时所得到的答案就是i这根柱子所能围成的最大面积。我们可以进一步思考:是不是可以采用同样的方法来得到j这根柱子所能围成的最大面积呢?采用同样的思路,我们移动i指针,当其高度不小于j指针的高度时,所得到的答案就是j柱子所能围成的最大面积

时间复杂度:\(O(n)\)
代码

class Solution {
    public int maxArea(int[] height) {
        int n = height.length;
        int i = 0,j = n - 1;
        int res = 0;
        while(i < j){
            int area = Math.min(height[i],height[j]) * (j - i);
            res = Math.max(res,area);
            if(height[i] <= height[j])i++;
            else j--;
        }

        return res;
    }
}

标签:容器,min,int,res,height,枚举,最多水,柱子
From: https://www.cnblogs.com/dengch/p/17807653.html

相关文章

  • 手把手教你写一个 IOC 容器
    一、介绍1、介绍最近无聊,也没什么事做,没事做总是要给自己找点事情做吧,毕竟人的生活在与折腾。于是,决定自己手动写一个IOC的框架。我们知道在NetCore的版本里面已经内置了IOC容器,它就是ServiceCollection,一般情况下,该容器还是够用的,但是有时候还......
  • Linux中使用Docker容器安装mysql,无法直接使用mysql命令?
    1.问题如果你在Docker容器中运行MySQL,你不能在宿主主机上使用mysql--version命令来检查MySQL版本,因为MySQL客户端工具在宿主主机上未安装。2.解释2.1方法一要查看容器内MySQL的版本,你需要进入到容器中执行相应的命令。以下是一种方法:dockerexec-itmysqlmys......
  • Docker 可视化容器管理平台--portainer
    Portainer是一个开源的轻量级容器管理工具,用于简化Docker容器的部署、管理和监控。它提供了一个直观易用的WebUI,允许用户通过可视化界面来管理Docker容器、镜像、卷等资源,而无需使用Docker命令行工具。Portainer可以部署在本地Docker环境、远程Docker主机或Docker......
  • 使用Web方式管理你的Linux、容器和KVM
    yum安装部署yuminstall-ycockpitcockpit-storagedcockpit-dockercockpit-machines启动 默认9090端口。访问输入服务器账号密码即可systemctlstartcockpit.service ......
  • docker 容器固定mac地址
    报错信息tomcat|===========产品服务器注册码为:tomcat|linuxtomcat|java.io.IOException:Cannotrunprogram"ifconfig":error=2,Nosuchfileordirectorydocker-compose配置:version:'3'services:tomcat:image:tomcat:7co......
  • streamlit容器布局
    streamlit容器布局目录streamlit容器布局侧边栏交互sidebar并排布局columns选项卡tabs展开式容器expander透明多元素container单元素empty参考资料侧边栏交互sidebarst.sidebar将交互元素添加至侧边栏#方法1.使用对象表示法st.sidebar.[element_name]#方法2.使用"w......
  • 华为云中虚拟机及容器的架构
    虚拟机现实中我们用的计算机看到的都是物理机,而虚拟机,顾名思义就是虚拟的机子,它把磁盘文件和描述文件封装在同一文件夹然后存放在底层存储提供的文件系统中,相较于物理机他的特点有:资源分区封装(操作系统与应用)独立(不同服务器之间的传递)隔离(每台虚拟机拥有一个独立的OS)容器......
  • JUC高并发容器-CopyOnWriteArrayList
    CopyOnWriteArrayListJUC高并发容器线程安全的同步容器类什么是高并发容器?CopyOnWriteArrayListJUC高并发容器线程安全的同步容器类  Java同步容器类通过Synchronized(内置锁)来实现同步的容器,比如Vector、HashTable以及SynchronizedList等容器。线程安全的同步容器类主要有Vec......
  • Qt之容器类
    一、容器类的概述Qt提供了多个基于模板的容器类,这些容器类可以用于存储指定类型的数据项,Qt的容器类比标准模板库(STL)中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的,而且它们进行了速度和存储优化,因此可以减少可执行文件的大小,此外,它们还是现场安全的,也......
  • 在Docker容器内,我如何连接到机器的本地主机?
    内容来自DOChttps://q.houxu6.top/?s=在Docker容器内,我如何连接到机器的本地主机?我有一个运行在Docker容器内的Nginx。我的主机系统上运行着一个MySql。我想从我的容器内连接到MySql。MySql只绑定到本地主机设备。有没有办法从这个Docker容器内连接到这个MySql或其他在本地......