news 2026/4/18 5:31:18

hot100 11.盛水最多的容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hot100 11.盛水最多的容器

思路:这道题无法使用分治法和动态规划法,要想得到O(n)的解法只能使用双指针。

1.本题中双指针的含义:指针每一次移动,都意味着排除掉了一个柱子。

2.举例:

(1)如下图所示,在一开始考虑相距最远的两个柱子所能容纳水的面积。水的宽度是两根柱子之间的距离d = 8,水的高度取决于两根柱子之间较短的那个,即左边柱子的高度h = 3。因此水的面积为3×8=24。

(2)如果选择固定一根柱子,另外一根变化,水的面积会如何变化?

(a)当前柱子是最两侧的柱子,水的宽度d为最大,其他的组合水的宽度都比这个小。

(b)左边的柱子较短,决定了水的高度为3。如果移动左边的柱子,新的水面高度不确定,但一定不会超过右边柱子的高度7。

(c)如果移动右边的柱子,新的水面高度一定不会超过左边柱子的高度3,也就是不会超过现在水面的高度。

(3)过程推导:

(a)由(2)推理可知,如果固定左边的柱子,移动右边的柱子,那么水的高度一定不会增加,且宽度一定减少,所以水的面积一定减少。因此左边柱子和任意一个其他柱子的组合都可以排除了。因此可以排除掉左边的柱子了。

(b)同理,若右边的柱子更小,那么右边柱子和任意一个其他柱子的组合都可以排除了。因此可以排除掉右边的柱子了。

(c)随着不断的排除,i和j都会往中间移动,当i和j相遇时,算法就结束了。

3.图解双指针解法的原理:

(1)排除掉一根柱子,指针移动究竟代表着什么?

假设一共有n根柱子,编号0,1,...,n - 1。高度分别为H0、H1、...、Hn - 1。要寻找的是两根柱子i,j,它们需要满足的约束条件是:

——i、j都是合法的柱子下标,即0<=i<n,0<=j<n。

——i在j的左边,即i < j。

(2)希望从中找到容纳水面积最大的柱子(i,j),以n = 8为例,这时候全部的搜索空间为:

(3)由于i、j的约束条件的限制,搜索空间是白色的倒三角部分。可以看到,搜索空间大小是O(n^2)数量级的。如果用暴力解法求解,一次只检查一个单元格,那么时间复杂度一定是O(n^2)。要想得到O(n)的解法,就需要能够一次排除多个单元格。

(4)一开始,先检查右上方的单元格(0,7),即考虑最左边的0号柱子和最右边的7号柱子,计算它们之间容纳水的面积,然后比较一下两根柱子的高度,关注其中较短的一根。

(5)假设左边的0号柱子较短,根据推理,0号柱子目前的水面高度已经到了上限。因此排除0号柱子的情况,也就是i = 0的情况,对应i++,就是削减了一行的搜索空间。

(6)排除了搜索空间的一行后,剩余的搜索空间仍然是倒三角形状。检查右上方的单元格(1,7),即考虑1号柱子和7号柱子,计算它们之间容纳水的面积。然后,比较两根柱子的高度。

(7)假设此时7号柱子较短,此时要排除7号柱子的情况,对应j--,就是削减了一列的搜索空间。

(8)经过n步后,就能排除掉所有的搜索空间,检查完所有的可能性。

附代码:

class Solution { public int maxArea(int[] height) { int res = 0; int i = 0; int j = height.length - 1; while(i < j){ int canContain = (j - i) * Math.min(height[i],height[j]); res = Math.max(res,canContain); if(height[i] < height[j]){ i++; }else{ j--; } } return res; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 9:13:13

SEO已死?Lovable增长负责人揭秘:你的增长剧本正在失效的真相

SEO已死&#xff1f;Lovable增长负责人揭秘&#xff1a;为什么你的增长剧本正在失效 大家好&#xff0c;我是Franco。 最近在增长圈子里&#xff0c;有一个话题被讨论得热火朝天&#xff1a;传统的SEO&#xff08;搜索引擎优化&#xff09;护城河正在崩塌。 这可不是什么危言耸…

作者头像 李华
网站建设 2026/4/15 20:51:48

LobeChat研究方向建议生成AI

LobeChat&#xff1a;构建可控、可扩展AI对话系统的实践路径 在企业纷纷拥抱大语言模型的今天&#xff0c;一个现实问题摆在面前&#xff1a;如何让强大的LLM真正落地到具体业务中&#xff0c;而不是停留在“能聊几句”的演示阶段&#xff1f;很多团队尝试过直接调用OpenAI API…

作者头像 李华
网站建设 2026/4/18 5:27:28

LobeChat劳动合同条款生成器

LobeChat劳动合同条款生成器 在企业日常运营中&#xff0c;人力资源部门常常面临大量重复性文书工作——尤其是劳动合同的起草。每一份合同都需要确保条款完整、用语规范&#xff0c;并严格符合《劳动合同法》及相关地方政策。传统方式依赖人工撰写或模板套用&#xff0c;不仅效…

作者头像 李华
网站建设 2026/4/12 2:41:43

AI绘画大赛联动:用LobeChat生成创意提示词参赛

AI绘画大赛联动&#xff1a;用LobeChat生成创意提示词参赛 在AI艺术创作的浪潮中&#xff0c;一场无声的变革正在发生。越来越多的设计师、艺术家和开发者发现&#xff0c;真正决定一幅AI生成图像质量的&#xff0c;往往不是模型本身&#xff0c;而是那短短几行“咒语”——提示…

作者头像 李华
网站建设 2026/4/18 5:23:46

LobeChat ISO27001体系建设建议

LobeChat 与 ISO27001&#xff1a;构建可信企业级 AI 聊天系统的实践路径 在当今企业加速智能化转型的背景下&#xff0c;AI 聊天系统已不再是简单的“对话接口”&#xff0c;而是承载知识服务、业务流程甚至核心决策支持的关键平台。随着大语言模型&#xff08;LLM&#xff09…

作者头像 李华
网站建设 2026/4/12 7:43:19

vue基于Springboot框架的流浪猫救助系统 流浪宠物领养系统

目录已开发项目效果实现截图开发技术系统开发工具&#xff1a;核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&…

作者头像 李华