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

LeetCode 热题100:42.接雨水

 这道题也可以用双指针

情景:如果有一个木桶,做桶高为left,右桶高为right,桶的底座厚height,则水可以接的面积为:

Volume = min(left, right) - height,即总是以桶最短的边减去底座装满水


解题思路: 

  1. 双指针从桶的最左边[0]和最右边[length-1]开始
  2. 记录当前桶的左边桶高为height[left]和height[right],将left_max = height[left]和right_max = height[right]此时无法接水。
  3. 由于总是以桶最短的边减去底座装满水:
    1. 如果left_max > right_max:移动短桶边(也就是right_max一边)使right--。
    2. 移动后,若height[right] 比 right_max 小,则该格接水公式为:V = min(left, right) - height[right]。将每一个格子接水累加,得到最终答案。
    3. 移动后,若height[right] 比 right_max大,则将right_max更新为当前桶高。
    4. 判断左右边界桶高,重复1-2-3的步骤,左右同理。

关键理解点1:不论如何,right指针和left指针最终会汇聚到height最高的一列,也就是Math.max(...height)

关键理解点2:每一格为最小单位,它总是以桶最短的边减去底座高度装水。

结合代码更好理解,代码如下:

var trap = function (height) {let ans = 0;let left = 0;let right = height.length - 1;let left_max = 0;let right_max = 0;while (left < right) {left_max = Math.max(height[left], left_max);right_max = Math.max(height[right], right_max);if (left_max < right_max) {ans = ans + left_max - height[left];left++;} else {ans = ans + right_max - height[right];right--;}}return ans;
};

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

相关文章:

  • 数据交换---JSON格式
  • uniapp在app中关于解决输入框键盘弹出后遮住输入框问题
  • haproxy七层均衡
  • ucharts 搭配uniapp 自定义x轴文字 实现截取显示
  • 基于SpringBoot+Uniapp的非遗文化宣传小程序(AI问答、协同过滤算法、Echarts图形化分析)
  • 代码随想录算法训练营Day35|动态规划Part03|01背包问题 二维、01背包问题 一维、416. 分割等和子集
  • (12)机器学习小白入门YOLOv:YOLOv8-cls 模型微调实操
  • YOLO-实例分割头
  • 解决http下浏览器无法开启麦克风问题
  • 【论文阅读 | TIV 2024 | CDC-YOLOFusion:利用跨尺度动态卷积融合实现可见光-红外目标检测】
  • Python实例之画小猪佩奇
  • 知识库搭建之Meilisearch‘s 搜索引擎 测评-东方仙盟测评师
  • Agent架构与工作原理:理解智能体的核心机制
  • Apache Ignite 中 WHERE 子句中的子查询(Subqueries in WHERE Clause)的执行方式
  • 社交电商推客系统全栈开发指南:SpringCloud+分润算法+Flutter跨端
  • 深入浅出控制反转与依赖注入:从理论到实践
  • 深度学习的一些疑点整理
  • J2EE模式---拦截过滤器模式
  • 操作系统 —— A / 概述
  • 工业通信网关详解:2025年技术选型与物联网方案设计指南
  • 激活函数Focal Loss 详解​
  • Jenkins流水线中的核心概念
  • DearMom以“新生儿安全系统”重塑婴儿车价值,揽获CBME双项大奖
  • STM32 GPIO(通用输入输出)详解:从模式原理到实战应用
  • C++_Hello算法_队列
  • Word2Vec和Doc2Vec学习笔记
  • 用手机当外挂-图文并茂做报告纪要
  • AWS PrivateLink方式访问Redis
  • Windows游戏自动检测本地是否安装 (C++版)
  • 设计模式七:抽象工厂模式(Abstract Factory Pattern)