当前位置: 首页 > 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.lryc.cn/news/596686.html

相关文章:

  • Unity UI的未来之路:从UGUI到UI Toolkit的架构演进与特性剖析(1)
  • 业务流逻辑如何搭建?为何橙武平台选用了 LogicFlow?​
  • day19 链表
  • 程序是如何生成的-以c语言为例
  • 信息学奥赛一本通 1553:【例 2】暗的连锁
  • 前端_CSS复习
  • 【React 入门系列】React 组件通讯与生命周期详解
  • 高可用架构模式——数据集群和数据分区
  • 单细胞转录组学+空间转录组的整合及思路
  • OneCode3.0 UI组件注解详解手册
  • 【vscode】vscode中python虚拟环境的创建
  • 回调地狱及解决方法
  • error C++17 or later compatible compiler is required to use ATen.
  • 【coze扣子】第1篇:coze快速入门
  • 威胁情报:Solana 开源机器人盗币分析
  • 以Java程序员角度理解MCP
  • 学习游戏制作记录(战斗系统简述以及击中效果)7.22
  • [c++11]std::function/bind
  • 基于SpringBoot+Vue的班级管理系统(Echarts图形化分析)
  • 101.对称二叉树
  • ubuntu 20.04 安装 cmake 3.26
  • VS Code 美化插件
  • 3ds Max 云端渲染插件 - 完整 Python 解决方案
  • Mysql-场景篇-2-线上高频访问的Mysql表,如何在线修改表结构影响最小?-1--Mysql8.0版本后的INSTANT DDL方案(推荐)
  • 基于mysql云数据库创建和美化表格,对比分析Power BI和Quick BI的功能优劣
  • 基于eBPF的Kubernetes网络故障自愈系统设计与实现
  • AI一周事件(2025年7月15日-7月21日)
  • 【Spring AI 0基础教程】1、基础篇 环境搭建 - 智能天气预报助手
  • 数据资产——解读数据资产全过程管理手册2025【附全文阅读】
  • 【时时三省】(C语言基础)指向函数的指针