算法刷题记录 —— 盛最多水的容器
题目链接11.盛最多水的容器问题分析这道题如果只追求O(n²)的实现并不难难点在于如何做到O(n)。我们先来看一下题目的示意图这道题的核心需求非常明确——找到能盛最多水的两条线构成的容器。容量的计算公式很简单面积 长 × 宽其中「宽」由两条线中较短的那条决定木桶效应「长」则是两条线在数组中的下标距离。换句话说对于任意两个位置i和jarea (j - i) × min(height[i], height[j])问题转化为如何快速找到「宽」和「长」的最佳搭配使得乘积最大化O(n²) 暴力解法最直接的思路当然是两重for循环枚举所有可能的线对组合逐一计算面积并更新最大值。代码写起来非常简单但时间复杂度是 O(n²)在数据量较大时会超时。那么为什么暴力解法是 O(n²) 呢原因在于每次只移动一个指针另一个指针固定不动要遍历出所有组合就必须做 n × n 级别的枚举。O(n) 双指针优化 —— 核心思路想要降到 O(n)思路也很直观两个指针都动起来。说起来简单但关键在于——怎么动才能保证不漏掉最大面积的那一组初始状态我们将left指针放在数组头部下标0right指针放在数组尾部下标n-1。此时「长」是最大的但「宽」可能很小——因为两条线中较矮的那条限制了容量。移动策略回到面积公式面积 长 × 宽。在当前状态下无论我们移动哪个指针「长」都会减小。那么我们要做的就是尽量让「宽」变大来弥补「长」的损失。而「宽」受限于两条线中较矮的那一条——根据木桶效应矮的那条才是真正的瓶颈。因此移动策略非常清晰如果height[left] height[right]说明左边的线是瓶颈那就left尝试换一条更高的线否则右边的线是瓶颈那就right--。每移动一步都重新计算当前面积并与全局最大值比较。当left和right相遇时遍历结束。为什么这样不会漏掉最大值因为每次我们舍弃的都是当前较矮的那条边——它和另一条边之间不可能再产生更大的面积了毕竟「长」在缩小而「宽」已经被这条矮边锁死了上限。这种贪心策略保证了我们一定能遍历到最优解。整个过程类似于滑动窗口本质上是一种巧妙的双指针 贪心思想。代码实现classSolution{publicintmaxArea(int[]height){intleft0;intrightheight.length-1;intmax0;while(left!right){// 计算当前面积长 × 宽intarea(right-left)*Math.min(height[left],height[right]);// 移动较短的那条边if(height[left]height[right]){left;}else{right--;}// 更新最大值if(areamax){maxarea;}}returnmax;}}关键点总结面积公式(right - left) × min(height[left], height[right])这是理解整个题目的基础。双指针初始化左右指针分别指向数组的头和尾此时「长」最大。移动策略每次移动较短的那条边这是「木桶效应」的直接体现也是 O(n) 正确性的核心保证。数学函数Math.min()用于获取两条边中的较小值注意积累这类常用 API。复杂度每个元素最多被访问一次时间复杂度O(n)空间复杂度O(1)。这道题的双指针思路非常经典核心在于想清楚「为什么移动较短的那条边不会漏掉最优解」。理解了这一点整道题就豁然开朗了。

相关新闻

3分钟把一张图变成可编辑的PSD分层文件:开源工具LayerDivider上手全记录

3分钟把一张图变成可编辑的PSD分层文件:开源工具LayerDivider上手全记录

3分钟把一张图变成可编辑的PSD分层文件:开源工具LayerDivider上手全记录 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 上周帮朋友救急&…

2026/10/18 14:58:15 阅读更多 →
微信聊天记录备份工具WechatBakTool:一个被下架的开源项目留下的启示

微信聊天记录备份工具WechatBakTool:一个被下架的开源项目留下的启示

微信聊天记录备份工具WechatBakTool:一个被下架的开源项目留下的启示 【免费下载链接】WechatBakTool 基于C#的微信PC版聊天记录备份工具,提供图形界面,解密微信数据库并导出聊天记录。 项目地址: https://gitcode.com/gh_mirrors/we/Wecha…

2026/10/19 2:04:40 阅读更多 →
如何通过Cursor将顶级AI编程助手稳定高效融入开发工作流

如何通过Cursor将顶级AI编程助手稳定高效融入开发工作流

最近在技术社区里,有一个现象挺有意思:一边是很多开发者还在为API调用成本、模型配额和“免费额度用完了怎么办”而精打细算,小心翼翼地使用着各种“平替”模型;另一边,却总能看到一些人,仿佛手握“无限火力…

2026/10/18 9:15:16 阅读更多 →

最新新闻

数学建模美赛 LaTeX 模板:从排版翻车到论文稳过的关键一战

数学建模美赛 LaTeX 模板:从排版翻车到论文稳过的关键一战

简介:这份2020美赛LaTeX模板面向参加美国大学生数学建模竞赛的选手,尤其是希望快速搭建规范论文排版、把精力集中在建模与写作上的本科及研究生团队。资源包共22个文件,约3.04MB,以tex主文件、cls文档类、bib参考文献库为核心&…

2026/10/19 2:34:45 阅读更多 →
webpack loader与plugin实战:从原理到手写自定义扩展

webpack loader与plugin实战:从原理到手写自定义扩展

1. 为什么必须吃透loader和plugin:webpack的构建流水线里它们各管哪一段1.1 从一次打包说起:webpack真正做了哪几件事先放下自定义loader和plugin这件事,回到最基础的场景:你执行npm run build,webpack到底在后台干了什…

2026/10/19 2:34:45 阅读更多 →
美赛LaTeX模板实战指南:从编译到排版避坑

美赛LaTeX模板实战指南:从编译到排版避坑

简介:这份2020美赛LaTeX模板面向参加美国大学生数学建模竞赛的本科生与研究生,尤其适合已掌握基础LaTeX语法、希望快速搭建规范论文结构的参赛者。它解决的是赛前排版耗时、格式不合规、参考文献与图表管理混乱等痛点,可直接套用于正式比赛写…

2026/10/19 2:34:45 阅读更多 →
RAG调优实战:从原理到落地的完整指南

RAG调优实战:从原理到落地的完整指南

直接进入正题。RAG 这个词,在大模型应用的圈子里已经被说烂了。检索增强生成,Retrieval-Augmented Generation,听起来就是把“检索”和“生成”拼在一起,可真把一套 RAG 从 Demo 调到能稳定上线的程度,你会发现里面处处…

2026/10/19 2:34:45 阅读更多 →
排序链表重复节点全删除:哑节点与前驱指针的工程实践

排序链表重复节点全删除:哑节点与前驱指针的工程实践

链表类的题目在 LeetCode 上有很多经典题,但 82 题在我心里一直是个“分水岭”——能做对的人不一定真的理解链表,但理解链表的人一定能把 82 题写得干净利落。它不涉及复杂的数据结构,也不考什么高深的算法,核心就是“如何在一个…

2026/10/19 2:34:45 阅读更多 →
SDC命令详解:使用set_logic_dc命令进行约束

SDC命令详解:使用set_logic_dc命令进行约束

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 目录 简单使用 写在最后 set_logic_dc命令可以设置当前设计中的输入端口为不关心(设置输入端口的driven_by_dont_care属性为true)&#xf…

2026/10/19 2:33:45 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →