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

[ LeetCode-----盛最多的水]

1.题目链接

LeetCode盛最多的水

2.题目描述

 

 

3.题目解析 

问题本质分析

"盛最多水的容器" 问题可以抽象为:在坐标轴上有 n 条垂直线段,第 i 条线段的两个端点分别是 (i, 0) 和 (i, height [i])。找到两条线段,使得它们与 x 轴共同构成的容器能够容纳最多的水。

容器的容量计算公式是:面积 = 宽度 × 高度,其中:

  • 宽度 = 两条线段的横坐标之差
  • 高度 = 两条线段中较短那条的长度(因为水会从较短的一边溢出)

 

算法核心思路

采用双指针从两端向中间移动,通过贪心策略每次选择可能获得更大面积的移动方向:

  1. 初始状态:左指针在最左端 (left=0),右指针在最右端 (right=height.size ()-1)
  2. 计算当前面积:以当前双指针为边界计算容器面积
  3. 更新最大面积:如果当前面积大于历史最大值,则更新
  4. 移动指针
    • 若左指针指向的线段更短,移动左指针 (left++)
    • 否则,移动右指针 (right--)
  5. 终止条件:左右指针相遇 (left>= right)

 下面我们画图理解:

1.定义两个指针分别从左右两端开始,计算当前的V

 

2.接着开始移动指针 

如果移动right,L会减小,H也会减小,则V一定减小,所以没必要这么做. 

 

如果移动left,L会增大,H会减小,但V有可能增大 

 

 

为什么这样移动指针是正确的?

这是理解算法的关键。假设我们有两个指针 left 和 right,且 height [left] < height [right]:

  • 如果我们移动右指针,新的宽度一定减小(因为 right-left 变小)
  • 新的高度取决于新的 right' 和原 left 中的较小值,由于原 left 是较短的,新高度不会超过原高度
  • 因此,移动右指针只会得到更小的面积,不可能得到更大的面积

反之,如果 height [right] 更短,移动左指针也会导致面积减小。因此,只有移动较短的指针才有可能获得更大的面积,这是一种贪心策略的体现。

 

这种双指针解法的优势在于:

  • 时间效率高:只需遍历一次数组,O (n) 时间复杂度
  • 空间效率高:只使用常数级额外空间,O (1) 空间复杂度
  • 思路简洁:通过贪心策略每次做出局部最优选择,最终得到全局最优解

这个算法充分体现了贪心算法的思想 —— 通过每一步的局部最优选择,最终达到全局最优。

 

完整代码: 

 

代码注释: 

 

复杂度分析 

该双指针解法在时间和空间上都达到了最优:

  • 时间复杂度:O (n)(线性时间,遍历一次数组)
  • 空间复杂度:O (1)(常数空间,不依赖输入规模)

这也是该算法被认为是「盛最多水的容器」问题最优解的核心原因 —— 在保证正确性的前提下,实现了极高的效率。

 

http://www.lryc.cn/news/608424.html

相关文章:

  • 如何快速解决PDF解密新方法?
  • SpringBoot启动项目详解
  • 丝杆升降机在物流运输领域有哪些应用场景
  • 大模型Agent记忆的主流技术与优缺点解析
  • 23th Day| 39.组合总和,40.组合总和II,131.分割回文串
  • 数据结构---概念、数据与数据之间的关系(逻辑结构、物理结构)、基本功能、数据结构内容、单向链表(该奶奶、对象、应用)
  • 模型 古德哈特定律(Goodhart’s law)
  • 跨语言AI服务指标收集实战
  • 【深度学习】【三维重建】windows11环境配置PyTorch3d详细教程
  • 智能图书馆管理系统开发实战系列(五):前后端集成 - koffi调用与接口设计
  • WAIC引爆AI,智元机器人收购上纬新材,Geek+上市,157起融资撑起热度|2025年7月人工智能投融资观察 · 极新月报
  • FreeRTOS源码分析一:task启动(RISCV架构)
  • 【图像处理基石】用Python实现基础滤镜效果
  • PCB铜浆塞孔工艺流程
  • 网页操作自动化解决方案:如何用Browser-Use+CPolar提升企业运营效率
  • openwrt下安装istore(基于pve)
  • CCF IVC 2025“汽车安全攻防赛” -- Crypto -- WriteUp
  • ESP2025年6月认证C++八级( 第三部分编程题(2)遍历计数)
  • 线程池的实现
  • 【python】转移本地安装的python包
  • 【语音技术】意图与语料
  • 从下单到发货:如何清晰表达发货时间
  • Python编程基础与实践:Python条件语句入门:掌握if, else, 和elif
  • Android动画实现控件形状、大小逐渐过渡
  • Agentic RAG:自主检索增强生成的范式演进与技术突破
  • Waterfox水狐浏览器、火狐浏览器外观修改
  • XGBoost三部曲:XGBoost参数详解
  • Store / Slice / Reducer
  • 利用DeepSeek将Rust程序的缓冲输出改写为C语言实现提高输出效率
  • Python爬虫实战:研究SimpleCV技术,构建图像获取及处理系统