当前位置: 首页 > news >正文

【LeetCode】11. 盛水最多的容器 题解

【LeetCode】11. 盛水最多的容器 题解

Link: https://leetcode.cn/problems/container-with-most-water/description/

给定一个长度为n nn的整数数组h hh(对应代码里的height)。有n nn条垂线,第i ii条线的两个端点是( i , 0 ) (i, 0)(i,0)( i , h i ) (i, h_i)(i,hi)

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

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

说明:不能倾斜容器。

输入输出样例

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

样例输入 2( 1 , 1 ) (1,1)(1,1)
样例输出 21 11

数据规模与约定

  • 2 ≤ n ≤ 10 5 2 \le n \le 10^52n105
  • ∀ i ∈ { 1 , 2 , ⋯ , n } , 0 ≤ h i ≤ 10 4 \forall i \in \{1,2,\cdots, n\}, \quad 0\le h_i \le 10^4i{1,2,,n},0hi104

Solution

Link: https://leetcode.cn/problems/container-with-most-water/solutions/3971886/11-sheng-shui-zui-duo-de-rong-qi-ti-jie-lx0x4/

1. 题意

已知一系列隔板的高度以及位置,求一对隔板使得其之间能够容纳最多体积的水。

2. 分析

比较入门的双指针板题。

首先,我们可以发现,能容纳水的体积等于两根线之间的水平距离乘以两根线高度的较小者(也就是有效高度)。

对于当前选定的一对下标(左右指针的位置)( l , r ) (l,r)(l,r),其中必然一根线较长一根较短。

  • 对于较长的线,如果将该处的指针(下标)往内移动,则依然会受制于短线的高度约束,中间可以容纳水的体积必然减小。这么做一定是更劣的。

  • 对于较短的线,如果将该处的指针往内移动,则宽度减小的同时,有可能会遇到更长的线,从而使得有效高度增加,因此这种策略下有可能取得更优解。

照着这个思路就很容易写出代码了,时间复杂度O ( n ) O(n)O(n),空间复杂度不计入参数列表则为O ( 1 ) O(1)O(1)

若将参数列表计入,则全局的空间复杂度亦为O ( n ) O(n)O(n)

3. 代码

publicclassSolution{publicintMaxArea(int[]height){intleft=0,right=height.Length-1,ans=-1;while(left<right){intcurrent=(right-left)*Math.Min(height[left],height[right]);ans=Math.Max(ans,current);if(height[left]<height[right]){left++;}else{right--;}}returnans;}}

4. 拓展

如果本题允许倾斜容器,该怎么做?

核心思路其实大差不差,依然是双指针逐渐向中间靠拢,只不过此时能容纳谁的体积是两块隔板以及中间一段水平距离围成的直角梯形的面积,等于两块隔板高度的算术平均值乘以水平距离。

在这个设定下,思路会有所改变。因为此时若左右指针对应的一对隔板高度不同,算术平均值的“拉扯”会使得移动短线或者长线都有可能取得更优解

请读者自行思考如何编写代码。

http://www.cnnetsun.cn/news/2492224.html

相关文章:

  • 多角色对话配音方案:顶伯 一键生成有声剧,支持角色区分
  • FontCenter:AutoCAD字体自动管理插件的深度实现方案
  • 硕士论文AIGC检测多少合格?2026最新各校标准,附免费降AI工具
  • 9大网盘直链下载助手:告别限速,免费实现高速下载自由
  • OpenHTMLtoPDF:现代Java应用中的HTML转PDF终极解决方案
  • 2026最新大模型学习路线:从零基础到实战精通,少走2年弯路
  • 不确定性连续体结构的拓扑优化【附代码】
  • 手机变身应急启动盘神器:3分钟掌握EtchDroid安卓USB启动盘制作终极指南
  • DeepEval企业级AI模型评估解决方案:零数据出境保障,提升模型质量80%的标准化框架
  • Scroll Reverser终极指南:3分钟彻底解决Mac滚动方向冲突难题
  • Activity
  • Mac微信插件终极指南:防撤回、多开登录与智能回复完整教程
  • 终极指南:3分钟快速解锁QQ音乐加密文件的完整免费方案
  • C++基础 class、struct、union详细
  • 别再只盯着压敏电压了!手把手教你读懂压敏电阻Datasheet上的关键参数(附选型速查表)
  • 电子离子对撞机强子存储环冷却段光束光学设计优化
  • 拆开长江存储TiPlus 7100 SSD,我们发现了关于Xtacking 3.0的一个“秘密”
  • 英雄联盟国服换肤终极指南:R3nzSkin完整使用教程
  • 终极SDR++软件无线电指南:3个步骤让你轻松收听全球无线电信号
  • 总梯度是各样本梯度的线性叠加
  • 互联网大厂 Java 求职者面试:微服务与安全框架的探讨
  • ARM SVE2指令集与SABD指令优化实战
  • 如何解决暗黑破坏神2存档管理的技术困境:d2s-editor深度技术解析
  • 别再手动复制了!用Python的pdfplumber库,5分钟把PDF表格批量转成Excel
  • 善良且有锋芒,理性的利己主义者
  • m4s-converter:5秒完成B站缓存视频转换的完整指南
  • 告别玄学调参:用Python手把手实现卡尔曼滤波器,搞定传感器数据融合
  • 磁力搜索终极指南:magnetW一站式聚合搜索工具快速上手
  • 番茄小说永久保存神器:5分钟打造个人数字图书馆
  • Midjourney景深控制黄金三角法则:prompt构图权重×--s 250×--style raw = 真实光学虚化效果(实验室级验证)