LeetCode_11_中等_盛最多水的容器

文章目录

  • 1. 题目
  • 2. 思路及代码实现(Python)
    • 2.1 双指针


1. 题目

给定一个长度为 n n n 的整数数组 h e i g h t height height 。有 n n n 条垂线,第 i i i 条线的两个端点是 ( i , 0 ) (i, 0) (i,0) ( i , h e i g h t [ i ] ) (i, height[i]) (i,height[i])

找出其中的两条线,使得它们与 x x x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

示例 1:

在这里插入图片描述
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例 2:

输入:height = [1,1]
输出:1


提示

  • n = = h e i g h t . l e n g t h n == height.length n==height.length
  • 2 < = n < = 1 0 5 2 <= n <= 10^5 2<=n<=105
  • 0 < = h e i g h t [ i ] < = 1 0 4 0 <= height[i] <= 10^4 0<=height[i]<=104

2. 思路及代码实现(Python)

2.1 双指针

这里有一个很直接的方式,就是遍历所有的容器边界组合,一个个对比找到装水最多的,但是这样的算法复杂度为 O ( n 2 ) O(n^2) O(n2),那是否有办法缩减掉一些组合呢?使得我们并不需要遍历所有的组合也能找到容量最大的容器。

这个方法就是双指针,在列表的左右两端生成指针,不断地把指针向中间靠拢,能够覆盖所有地容器边界情况,但是每一次移动指针,都会缩减一部分边界组合,这里就有一个问题,到底需要移动哪个指针?假设有两个指针在列表的 i , j i,j i,j 位置,其中, h e i g h t [ i ] < h e i g h t [ j ] height[i] < height[j] height[i]<height[j],不论我们移动哪一边的指针,容器的长都会减小,且容器的高取决于最矮的边界,因此,对于左指针(较矮)而言,不会有包含左指针的组合且容量还大于当前组合的情况了,因此左指针可以移动。

例如:[3,>2,6,8,3,2,4<],假设左指针在2,右指针在4,此时的容器容量为 5 × 2 = 10 5\times 2=10 5×2=10,显然,不论我们如何移动右指针,只要左指针还是2的位置,那右指针的值可能比4高,或者比4低甚至比2低,但新容器的长都会小于5,且高不会高于2(取边界的较小值),因此固定左指针2之后的容器容量不会再高于10,此时可以舍弃左指针的位置,向右移动。

依次类推,左右指针不断把较小值向中间推移,最终得到的较大容量即为总体最大的容量。此时,由于指针只移动了 n n n 次,因此算法时间复杂度为 O ( n ) O(n) O(n),而移动指针的过程只记录指针位置和当前最大值,空间复杂度为 O ( 1 ) O(1) O(1)

class Solution:def maxArea(self, height: List[int]) -> int:l, r = 0, len(height) - 1ans = 0while l < r:area = min(height[l], height[r]) * (r - l)ans = max(ans, area)if height[l] <= height[r]:l += 1else:r -= 1return ans

执行用时:169 ms
消耗内存:26.77 MB

参考来源:力扣官方题解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

联想M7268、7208打印机加粉清零方法

联想小新M7268激光一体机基本参数 产品类型 黑白激光多功能商用一体机 涵盖功能 打印/复印/扫描 最大处理幅面 A4 耗材类型 鼓粉分离 耗材容量 硒鼓LD2268&#xff1a;10000页&#xff0c;墨粉LT2268&#xff1a;1000页 双面功能 手…

Linux常用的管线命令(pipe)

只介绍命令和对应的功能&#xff0c;详细用法可针对性的自行搜索 管线命令基本上都是对文本进行截取的功能&#xff0c;据我观察&#xff0c;他们基本上会以行为单位。 以下命令都可以用在管道上&#xff0c;但是有些也可以单独使用。 以下演示的文件是用last | head -n 12 >…

你知道Mysql的架构吗?

msyql分为server曾和存储引擎层 server层包括了连接器(管理连接&#xff0c;权限验证)、查询缓存&#xff08;命中直接返回结果&#xff09;、分析器&#xff08;词法分析&#xff0c;语法分析&#xff09;、优化器&#xff08;执行计划生成&#xff0c;索引选择&#xff09;、…

java.lang.IllegalArgumentException: When allowCredentials is true

1.遇到的错误 java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a…

vue echarts地图

下载地图文件&#xff1a; DataV.GeoAtlas地理小工具系列 范围选择器右侧行政区划范围中输入需要选择的省份或地市&#xff0c;选择自己想要的数据格式&#xff0c;这里选择了geojson格式&#xff0c;点右侧的蓝色按钮复制到浏览器地址栏中&#xff0c;打开的geojson文件内容…

gRPC-gateway使用介绍

gRPC-gateway 参考资料&#xff1a;gRPC-Gateway使用指南 服务中&#xff0c;使用了gRPC gateway&#xff08;代理&#xff09;来将外部的http请求映射为内部rpc调用。 proto文件示例&#xff1a; // 导入google/api/annotations.proto import "google/api/annotations…

Oracle 19c rac集群管理 -------- 集群启停操作过程

Oracle rac集群启停操作过程 首先查看数据库的集群的db_unique_name SQL> show parameter nameNAME TYPE VALUE ------------------------------------ ----------- --------------------------- cdb_cluster_name …

Android Dialog 显示不全的问题

前言&#xff1a;开发的时候发现一些运行到手机里的dialog显示不全&#xff0c;只显示一半左右 问了下chatgpt发现没有任何头绪&#xff0c;于是开始自己慢慢分析 显示去掉了原有的dialog的style发现问题解决了&#xff0c;但在原有基础上如何解决呢&#xff1f; 先看看xml&a…

MYSQL之索引语法与使用

索引分类 分类 含义 特点 关键字 主键索引 针对表中主键创建的索引 默认自动创建&#xff0c;只能有一个 PRIMARY 唯一索引 …

【UE】在控件蓝图中通过时间轴控制材质参数变化

效果 步骤 1. 新建一个控件蓝图和一个材质 2. 打开材质&#xff0c;设置材质域为用户界面&#xff0c;混合模式设置为“半透明” 在材质图表中添加两个参数来控制材质的颜色和不透明度 3. 对材质创建材质实例 4. 打开控件蓝图&#xff0c;在画布面板中添加一个图像控件 将刚…

DC-8靶机做题记录

靶机下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1jPMYoyFZXqr7sVMElHqGcw?pwdypq9 提取码&#xff1a;ypq9 参考&#xff1a; 【DC系列靶机DC8通关讲解】 https://www.bilibili.com/video/BV1R84y1H7rk/?share_sourcecopy_web&vd_source12088c392…

指针数组与数组指针

数组指针与指针数组 动态数组 扩容&#xff1a;空间不够&#xff0c;重新申请2倍大小的连续空间&#xff0c;拷贝元素后&#xff0c;释放旧空间 动态数组区别于静态数组&#xff0c;其不具备begin(),end()操作 //动态一维数组int n 10;int *a new int[n];//可以输入n值&…

(完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子

前言 自用生信代码&#xff0c; 花费一个多月写下来的。自学R以来第一次写600多行的代码。我的文章已经发表&#xff0c;如对您的研究有帮助希望可以引用一下。文章点我 SVM-RFE 主要是借助e1071包&#xff0c; 实现mSVM-REF识别并筛选关键基因&#xff0c;没有安装的小伙伴…

SpringBoot3(一)动力节点总结

目录 0、有用的新特性 一、Record 1.1、Record的介绍 1.2、Record的声明 1.3、Record的创建 0、有用的新特性 JDK8-19 新增了不少新特性&#xff0c;这里我们把实际常用的新特性&#xff0c;给大家介绍一下&#xff0c;包括以下几个方面&#xff1a; Java RecordSwich 开…

Gold-YOLO(NeurIPS 2023)论文与代码解析

paper&#xff1a;Gold-YOLO: Efficient Object Detector via Gather-and-Distribute Mechanism official implementation&#xff1a;https://github.com/huawei-noah/Efficient-Computing/tree/master/Detection/Gold-YOLO 存在的问题 在过去几年里&#xff0c;YOLO系列已经…

东南大学博士,华为上班5年,月薪达到4万4000,年终奖近10万

东南大学博士&#xff0c;华为上班5年&#xff0c;月薪达到4万4000&#xff0c;年终奖近10万 近日有华为员工爆料真实薪资&#xff0c;该网友是东南大学2018级博士&#xff0c;华为工作近5年&#xff0c;薪资达到4万4000&#xff0c;年终奖近10W。 该网友华为职场履历如下&am…

Qt6入门教程 10:菜单栏、工具栏和状态栏

目录 一.菜单栏 1.Qt Designer 1.1添加菜单和菜单项 1.2添加二级菜单 1.3给菜单和菜单项添加图标 1.4给菜单项添加功能 2.纯手写 二.工具栏 1.Qt Designer 1.1添加工具栏按钮 1.2工具栏的几个重要属性 2.纯手写 三.状态栏 1.Qt Designer 2.纯手写 用Qt Creator新…

iptables命令详解

简介 iptables 是 Linux 系统中用于配置 IPv4 数据包过滤规则的工具。它是 Linux 内核中 Netfilter 框架的一部分&#xff0c;通过设置规则&#xff0c;可以实现网络包的过滤、NAT 转发、端口映射等功能。 基本概念 表&#xff08;Tables&#xff09;&#xff1a; filter 表…

GPU与SSD间的P2P DMA访问机制

基于PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;总线连接CPU、独立GPU和NVMe SSD的系统架构。 在该架构中&#xff0c;PCIe Swicth支持GPU与SSD之间快速的点对点直接内存访问&#xff08;peer-to-peer, p2p DMA&#xff09;。通常情况下&#xff0…

Qt-QFileDialog保存文件及获取带扩展名的文件名

正确用法 QFileDialog dialog(this, "Save File", QDir::currentPath(), "Text Files (.txt)"); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setDefaultSuffix("txt"); // << if (!dialog.exec())return; QString fileName …