news 2026/6/13 3:49:56

双指针2--盛水最多的容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
双指针2--盛水最多的容器

🔥个人主页:Milestone-里程碑

❄️个人专栏: <<力扣hot100>> <<C++>><<Linux>>

<<Git>><<MySQL>>

🌟心向往之行必能至

题目回顾

LeetCode 第 11 题盛最多水的容器是一道经典的双指针应用题目。

题目大意:

  • 给定一个整数数组height,数组中的每个元素代表一条垂直线的高度
  • 我们需要选出两条线,与 x 轴组成一个容器
  • 目标是让这个容器能装下最多的水(面积最大)
  • 注意:容器不能倾斜

示例:输入:height = [1,8,6,2,5,4,8,3,7]输出:49解释:选高度为 8(索引 1)和 7(索引 8)的两条线,容器宽度为 7,高度为 7,面积为7×7=49

思路解析

1. 暴力解法(思路简单但低效)

最直观的思路是枚举所有可能的两条线的组合,计算它们的面积,然后取最大值。

  • 时间复杂度:O(n²),需要双重循环遍历所有组合
  • 空间复杂度:O(1),只需要常数空间

这种方法在数组长度较大时会超时,无法通过所有测试用例。


2. 双指针解法(最优解)

我们可以用双指针法将时间复杂度优化到O(n),这也是这道题的标准解法。

核心思路

  1. 初始化两个指针,left指向数组开头,right指向数组结尾。
  2. 计算当前指针所指两条线组成的容器面积:面积 = (right - left) × min(height[left], height[right])
  3. 移动高度较小的那个指针:
    • 如果height[left] < height[right],说明左边的线是 “短板”,移动left指针向右
    • 否则,移动right指针向左
  4. 重复步骤 2-3,直到两个指针相遇。

为什么这样移动指针是正确的?这是一个贪心的策略。因为容器的面积由宽度和短板的高度决定。

  • 如果移动较高的那个指针,宽度会减小,而短板的高度不会增加,所以面积只会更小。
  • 只有移动较矮的那个指针,才有可能找到更高的线,从而得到更大的面积。

完整代码实现(C++)

cpp

class Solution { public: int maxArea(vector<int>& height) { int left = 0; int right = height.size() - 1; int max_area = 0; while (left < right) { // 计算当前容器的宽度 int width = right - left; // 计算当前容器的面积 int current_area = width * min(height[left], height[right]); // 更新最大面积 max_area = max(max_area, current_area); // 移动高度较小的指针 if (height[left] < height[right]) { left++; } else { right--; } } return max_area; } };

复杂度分析

  • 时间复杂度O(n),数组中的每个元素最多被访问一次。
  • 空间复杂度O(1),只使用了常数级别的额外空间。

测试验证

我们用题目中的示例输入[1,8,6,2,5,4,8,3,7]来验证代码:

  1. 初始left=0right=8,面积为8 × 1 = 8
  2. 因为height[0] < height[8],移动left到 1。
  3. 此时left=1right=8,面积为7 × 7 = 49,这是目前的最大值。
  4. 因为height[8] < height[1],移动right到 7。
  5. 继续这个过程,直到指针相遇,最终得到最大面积49

总结

双指针法是解决这类数组区间问题的利器,它通过贪心策略,在一次遍历中就找到最优解,时间效率极高。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 2:22:51

三维视觉解码器:F3D全方位3D模型预览解决方案

三维视觉解码器&#xff1a;F3D全方位3D模型预览解决方案 【免费下载链接】f3d Fast and minimalist 3D viewer. 项目地址: https://gitcode.com/GitHub_Trending/f3/f3d 核心优势解析 &#x1f4a1; 选择工具前先了解核心价值&#xff1a;F3D不仅是普通查看器&#xf…

作者头像 李华
网站建设 2026/5/29 22:06:59

YOLO11省钱部署:按需计费GPU镜像使用实战推荐

YOLO11省钱部署&#xff1a;按需计费GPU镜像使用实战推荐 YOLO11不是官方发布的版本号&#xff0c;而是社区对最新一代YOLO架构的通俗叫法——它代表了当前目标检测领域中兼顾精度、速度与易用性的前沿实践形态。不同于早期需要手动拼接模块、反复调试依赖的部署方式&#xff…

作者头像 李华
网站建设 2026/6/9 19:56:26

如何快速验证Qwen3-Embedding-0.6B?Jupyter调用代码实例详解

如何快速验证Qwen3-Embedding-0.6B&#xff1f;Jupyter调用代码实例详解 你是不是也遇到过这样的情况&#xff1a;刚下载了一个新嵌入模型&#xff0c;想马上看看它能不能跑起来、输出的向量靠不靠谱&#xff0c;但卡在环境配置、服务启动、API调用这三关上&#xff1f;别急—…

作者头像 李华
网站建设 2026/6/8 13:34:50

Chemex 3.9.0:开源企业级资产管理系统的架构创新与实践指南

Chemex 3.9.0&#xff1a;开源企业级资产管理系统的架构创新与实践指南 【免费下载链接】chemex &#x1f525; 咖啡壶是一个免费、开源、高效且漂亮的资产管理平台。资产管理、归属/使用者追溯、盘点以及可靠的服务器状态管理面板。基于优雅的Laravel框架开发。 项目地址: h…

作者头像 李华
网站建设 2026/6/6 15:28:49

音频上传失败怎么办?SenseVoiceSmall常见问题解决实战案例

音频上传失败怎么办&#xff1f;SenseVoiceSmall常见问题解决实战案例 1. 为什么音频上传总卡在“加载中”&#xff1f;真实场景还原 你兴冲冲地打开 SenseVoiceSmall 的 Web 界面&#xff0c;拖进一段会议录音&#xff0c;点击“开始 AI 识别”&#xff0c;结果进度条停在 8…

作者头像 李华
网站建设 2026/5/28 17:59:15

避坑指南:使用YOLOv10官版镜像常见问题全解析

避坑指南&#xff1a;使用YOLOv10官版镜像常见问题全解析 在实际部署YOLOv10官版镜像过程中&#xff0c;很多用户反馈“明明按文档操作了&#xff0c;却卡在某个环节”“预测结果为空”“导出失败”“训练报错找不到模块”——这些问题往往不是模型本身的问题&#xff0c;而是…

作者头像 李华