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

LeetCode Hot 100:11. 盛最多水的容器

题目

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。

说明:你不能倾斜容器。

解析

设双指针,左右指针分别在头和尾,初始化接水体积,且由于木桶效应,接水的高度取决于较短的那条边

如果当前较高的那条边向中间移动:

1. 找到更短的边则跳过;

2. 找到更高的边,接水高度仍取为短边的值,由于宽度减少,接水体积仍会减少。

所以要让当前接水体积变大, 需要让当前较高高度的指针不动,尝试将指向较短高度的指针向中间收缩(尝试往中间找一个更高的高度,让决定接水高度的短边更高)。

如果计算出更大的容量,则更新接水体积。

step1: 要返回一个最大值,记为ans,初始化为0;
step1.2:计算ans
step2:初始化左右指针,一个初始化为开头,另一个初始化为尾端;
step3: 指针运行条件是left<right;
step4: 哪边短先移动哪边;
step5:决定在哪里插入ans;如果先移动指针再计算会跳过当前值,所以先将ans放入while后,判断条件前

来源:11. 盛最多水的容器 - 力扣(LeetCode)

答案

/*** @param {number[]} height* @return {number}*/
var maxArea = function(height) {let left = 0, right = height.length-1, ans = 0;    //初始化左右指针和接水体积while(left < right) {const area = (right - left) * Math.min(height[left], height[right]);    //当前体积ans = Math.max(ans, area);    //更新最大体积if(height[left] < height[right]) {    //决定接水高度的短边指针往中间移动,找更高的边left++;} else {right--;}}return ans;
};

复杂度分析

时间复杂度:O(n),其中 n 为 height 的长度。

空间复杂度:O(1),仅用到若干额外变量。

http://www.dtcms.com/a/304300.html

相关文章:

  • Vulnhub 02-Breakout靶机渗透攻略详解
  • 牛顿拉夫逊法PQ分解法计算潮流MATLAB程序计算模型。
  • 【AI论文】Yume:一种交互式世界生成模型
  • Docker网络技术深度研究与实战手册
  • C++与C#实战:FFmpeg屏幕录制开发指南
  • 2025年KBS顶刊新算法-向光优化算法Phototropic growth algorithm-附Matlab免费代码
  • 从线下挂号到全流程智能问诊:智慧医院APP源码开发指南
  • MATLAB弹塑性固体有限元计算程序
  • 【LGR-234-Div.3】洛谷网校 7 月 CSP-J 模拟月赛 Cfz Round 6 「Cfz Round 6」Imaichi
  • 【PHP】通过IP获取IP所在地理位置(免费API接口)
  • Kruskal算法
  • gTest测试框架的安装与配置
  • HammerDB:一款免费开源的数据库基准测试工具
  • YOLOv11.pt 模型转换为 TFLite 和 NCNN 模型
  • PDF转Word免费工具!批量处理PDF压缩,合并, OCR识别, 去水印, 签名等全功能详解
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(三)
  • Visual Studio的妙用
  • [极客大挑战 2019]FinalSQL
  • 如何查询并访问路由器的默认网关(IP地址)?
  • 大规模矩阵构建与高级算法应用
  • Unity 编辑器开发 之 Excel导表工具
  • Python爬虫01_Requests第一血获取响应数据
  • 香橙派One安装OctoPrint 实现控制3D打印机
  • WebRTC 2025全解析:从技术原理到商业落地
  • 容器技术原理(一):从根本上认识容器镜像
  • Linux boot 目录损坏如何修复:从救援模式到系统恢复
  • APK重打包流程
  • K8s集群两者不同的对外暴露服务的方式
  • 如何迁移gitlab到另一台服务器
  • Makefile 快速入门指南