讲师中心 微信公众号
AI工具推荐 视频效率加速

算法中怎么使用双指针技巧高效解决盛最多水的容器问题

轻瑶君_1165

轻瑶君_1165

发布时间:2026-08-09 17:19:47

|

548人浏览过

|

来源于php中文网

原创

必须从最宽开始,因为初始宽度最大且面积=宽度×较短边高度,只有先保证宽度最大,才可能获得全局最大值;每次只移动较短边指针,因移动较长边必然导致面积减小,而移动较短边有望提升短板高度从而增大面积;通过贪心剪枝确保不漏最优解。

算法中怎么使用双指针技巧高效解决盛最多水的容器问题

直接用双指针从两端向中间收缩,每次移动较短边的指针,就能在 O(n) 时间内找到最大盛水量。

为什么必须从最宽开始

容器面积 = 宽度 × 较短边高度。初始时左右指针分别在首尾,宽度最大。这是唯一可能取得全局最大值的起点——因为任何其他组合宽度都更小,除非高度显著提升,否则无法超越当前值。

  • 宽度随指针靠近持续减小,所以要争取在宽度尚大时,尽快找到更高的“短板”
  • 如果一开始就缩窄宽度,会永久丢失“最宽+中等高”这种潜在优解

为什么只移动较短边的指针

移动长边没有意义:宽度变小,而决定高度的仍是短边,新面积必然更小。

java-api-doc-generator
java-api-doc-generator

分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。

下载
  • 假设 left 高度为 3,right 高度为 8,当前面积 = (j−i)×3
  • 若右移 right,新宽度减 1,新高度 ≤ 3(因为 left 还是短板),面积一定下降
  • 若右移 left,新宽度减 1,但新 left 高度可能为 5、7、9……只要 ≥ 3,就存在面积更大的可能

怎么保证不漏掉最优解

每轮舍弃的都是“已知不可能更好”的组合。例如当前 left=0, right=n−1,且 height[0] 较小,那么所有以 height[0] 为左边界、其他任意位置为右边界的容器,面积都不超过当前值。

  • 因为它们宽度 ≤ 当前宽度,且高度 ≤ height[0]
  • 所以这些组合全被安全剪枝,无需枚举
  • 算法本质是贪心+剪枝,不是穷举,但数学上可证明覆盖全部候选最优解

代码实现要点

只需两个变量维护指针和一个变量记录最大值,无额外空间开销。

  • 初始化 left=0,right=数组末尾索引
  • 循环条件是 left
  • 每次计算面积后,比较 height[left] 和 height[right],移动较小者
  • 注意整数乘法可能溢出,但题目数据范围(height[i]≤10⁴,n≤10⁵)下 int 足够

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

379

2026.04.23

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

6676

2023.08.14

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

XORM框架零基础入门教程
XORM框架零基础入门教程

本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。

0

2026.11.04

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

Docker Desktop镜像构建教程
Docker Desktop镜像构建教程

想使用Docker Desktop将本地项目构建成Docker镜像?本专题围绕镜像构建的实际操作展开,介绍Dockerfile编写、构建命令使用、镜像标签设置和构建日志查看等内容,同时整理镜像无法生成、依赖安装失败及构建缓存异常等问题的排查思路。

0

2026.11.03

Docker Desktop容器创建指南
Docker Desktop容器创建指南

本专题聚焦Docker Desktop容器创建与运行配置,介绍通过本地镜像或远程镜像创建容器的方法,以及容器启动、终端访问、日志查看和基础管理等操作。针对端口冲突、参数配置不当、容器无法启动等情况,也整理了相应的排查方向。

0

2026.11.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn