接雨水-热题 100?-Lua 中文代码解题第4题

接雨水-热题 100?-Lua 中文代码解题第4题

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 

示例 2:

输入:height = [4,2,0,3,2,5]
输出:9

提示:

  • n == height.length
  • 1 <= n <= 2 * 10^{4}
  • 0 <= height[i] <= 10^{5}

解题思路: 

接雨水问题的解决主要依赖于动态规划的思想。这个问题可以理解为求解在一系列柱子中,每根柱子能够存储多少雨水。

1. 初始化:
   - 创建两个数组 `left_max` 和 `right_max` 分别记录每根柱子左边和右边的最大高度。
   - 对于 `left_max`,初始化时,第一根柱子左边的最大高度就是它自身。

2. 计算左右最大值:
   - 从第二根柱子开始,遍历整个柱子序列,对于每一根柱子,其左侧最大高度是它与前一根柱子中的较大者(因为雨水只能被比它高的柱子拦截)。
   - 同理,对右侧最大高度进行计算,不过由于我们是从右向左遍历,所以需要倒序遍历,初始值设置为最后一个柱子的高度。

3. 计算并累加雨水量:
   - 再次遍历一次柱子序列,对于每一根柱子,它能储存的雨水量等于它的两侧最大高度中的较小值减去它自身的高度。注意,只有当这个差值大于0时,才能储存雨水,否则高度不够无法存储。

4. 返回结果:
   - 遍历完成后,累计的雨水总量即为所求的答案。

通过以上步骤,我们可以有效地避免重复计算,并确保找到每根柱子可以储存的最大雨水量,最终得到所有柱子总共能接住的雨水总量。

中文代码 -- 无注释版
函数 合计(水坑高度)如果 #水坑高度 == 0 即返回 0结束局部 n = #水坑高度局部 左边高度 = {水坑高度[1]}因为 i = 2, n 做左边高度[i] = 数.最大值(左边高度[i - 1], 水坑高度[i])结束局部 右边高度 = {}因为 i = n, 1, -1 做右边高度[i] = 数.最大值(右边高度[i + 1] 或 0, 水坑高度[i])结束局部 接水量 = 0因为 i = 1, n 做接水量 = 接水量 + 数.最小值(左边高度[i], 右边高度[i]) - 水坑高度[i]结束返回 接水量
结束-- 示例用法演示:
-- 给定一个表示柱子高度的数组,调用合计函数计算其容纳雨水总量
接雨水 = {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1}
输出(合计(接雨水))
中文代码 -- 带注释的如下:
-- 根据给定高度数组计算容器内可容纳雨水总量
-- @参数 水坑高度 数组,表示每个位置柱子的高度信息
-- @返回 返回一个整数,表示容器能容纳的雨水总量
函数 合计(水坑高度)-- 若高度数组为空,则直接返回0如果 #水坑高度 == 0 即返回 0结束局部 n = #水坑高度-- 初始化并计算每个位置左侧的最大高度局部 左边高度 = {水坑高度[1]}因为 i = 2, n 做左边高度[i] = 数.最大值(左边高度[i - 1], 水坑高度[i])结束-- 计算每个位置右侧的最大高度局部 右边高度 = {}因为 i = n, 1, -1 做右边高度[i] = 数.最大值(右边高度[i + 1] 或 0, 水坑高度[i])结束-- 计算每个位置形成的凹槽可容纳雨水量,并累加至总水量局部 接水量 = 0因为 i = 1, n 做接水量 = 接水量 + 数.最小值(左边高度[i], 右边高度[i]) - 水坑高度[i]结束返回 接水量
结束
这段代码运行后将会输出:6

我就想问这样子做代码,是不是有点入门水平学生,

即可以少做中文注释,大家也能看得懂。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2869677.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2.2 物理层传输介质

文章目录 2.2 物理层传输介质&#xff08;一&#xff09;传输介质及分类&#xff08;二&#xff09;导向型传输介质&#xff08;1&#xff09;双绞线&#xff08;2&#xff09;同轴电缆&#xff08;3&#xff09;光纤 &#xff08;三&#xff09;非导向性传输介质 总结 2.2 物理…

数字多空策略(实盘+回测+数据)

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

计算机网络----计算机网络的基础

目录 一.计算机网络的相关概念 二.计算机网络的功能 三.计算机网络的发展 四.计算机网络的组成 五.计算机网络的分类 六.计算机的性能指标 1.速率 2.带宽 3.吞吐量 4.时延 5.时延带宽积 6.往返时延RTT 7.利用率 七.计算机的分层结构 八.ISO/OSI参考模型 九.OSI…

【四 (6)数据可视化之 Grafana安装、页面介绍、图表配置】

目录 文章导航一、Grafana介绍[✨ 特性]二、安装和配置1、安装2、权限配置&#xff08;账户/团队/用户&#xff09;①用户管理②团队管理③账户管理④看板权限 3、首选项配置4、插件管理①数据源插件②图表插件③应用插件④插件安装方式一⑤安装方式二 三、数据源管理1、添加数…

宜搭faas服务器获取accessToken

可以用faas服务器的OpenAPIUtil.getCustomAccessTokenThenCache&#xff08;Client ID,Client Secret&#xff09;就可以获取 至于获取这个Client ID&#xff0c;Client Secret 就需要在钉钉开放平台创建一个应用 然后在这个应用的基础信息里面有 注意的是&#xff1a;如果需要…

如何通过小程序上的产品力和品牌力提升用户的复购能力?

随着网络购物小程序的发展以及内容电商、社交电商、垂直电商、品牌自营等多个细分类型的出现&#xff0c;小程序成为用户日常购物、大促囤货以及首发抢购的重要场景&#xff0c;市场竞争也逐渐激烈。如何在用户侧获得更多转化、留存与复购&#xff0c;成为企业品牌日益关注的话…

复习知识点

1. Java常用API 1.1 String类 在java中&#xff0c;String类代表字符串&#xff0c;字符串是常量的&#xff0c;不能被改变。如果想改变字符串。可以用字符串的缓冲区&#xff0c;StringBuffer、StringBuilder 1.1.1 String类的创建方式 第一种&#xff08;常用&#xff09…

DZB-214中间继电器 工作电压220V-保持电流1A-面板安装 JOSEF约瑟

系列型号:DZB-200中间继电器 DZB-210中间继电器&#xff1b;DZB-213中间继电器&#xff1b; DZB-214中间继电器&#xff1b;DZB-217中间继电器&#xff1b; DZB-220中间继电器&#xff1b;DZB-226中间继电器&#xff1b; DZB-228中间继电器&#xff1b;DZB-230中间继电器&#…

基于springboot+mysql+Shiro实现的宠物医院管理系统

1.项目介绍 系统主要为用户提供了管理员权限的用户&#xff0c;实现了前台查看客户信息、在线添加预约等&#xff1b;后台管理医生坐诊信息、管理就诊信息、修改密码&#xff0c;管理公告、管理宠物分类、管理就诊、管理用户、修改密码等。在设计方面&#xff0c;本系统采用MV…

Android Studio 打包 Maker MV apk 详细步骤

一.使用RPG Make MV 部署项目&#xff0c;获取项目文件夹 这步基本都不会有问题&#xff1a; 二.安装Android Studio 安装过程参考教材就行了&#xff1a; https://blog.csdn.net/m0_62491877/article/details/126832118 但是有的版本面板没有Android的选项&#xff08;勾…

Explain 关键字

优质博文&#xff1a;IT-BLOG-CN explain关键字可以模拟优化器执行 SQL 查询语句&#xff0c;从而知道 MySQL 是如何处理 SQL 语句的。分析查询语句或表结构的性能瓶颈。执行语句&#xff1a;explain SQL语句。表头信息如下&#xff1a; 一、ID 参数 select 查询的序列号&…

Webapi(.net6) 批量服务注册

如果不考虑第三方库&#xff0c;如Autofac这种进行服务注入&#xff0c;通过本身的.Core Weabpi实现的&#xff0c;总结了两种实现方法&#xff0c; 1.一种是参考abp框架里面的形式; 1.1 新建个生命周期的文件夹: 三个接口分别为: public interface IScopedDependency { }pu…

微信小程序开发学习笔记——3.11完成form评论案例的实现逻辑

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;https://www.bilibili.com/video/BV19G4y1K74d?p25&vd_source9b149469177ab5fdc47515e14cf3cf74 一、javascript参考手册——splice https://www.…

Qt教程 — 3.4 深入了解Qt 控件:Input Widgets部件(3)

目录 1 Input Widgets简介 2 如何使用Input Widgets部件 2.1 Dial 组件-模拟车速表 2.2 QScrollBar组件-创建水平和垂直滚动条 2.3 QSlider组件-创建水平和垂直滑动条 2.4 QKeySequenceEdit组件-捕获键盘快捷键 Input Widgets部件部件较多&#xff0c;将分为三篇文章介绍…

基于Java+SpringMVC+vue+element实现前后端分离校园失物招领系统详细设计

基于JavaSpringMVCvueelement实现前后端分离校园失物招领系统详细设计 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收…

相机与相机模型(针孔/鱼眼/全景相机)

本文旨在较为直观地介绍相机成像背后的数学模型&#xff0c;主要的章节组织如下&#xff1a; 第1章用最简单的针孔投影模型为例讲解一个三维点是如何映射到图像中的一个像素 第2章介绍除了针孔投影模型外其他一些经典投影模型&#xff0c;旨在让读者建立不同投影模型之间的建模…

CI/CD实战-git工具使用 1

版本控制系统 本地版本控制系统 集中化的版本控制系统 分布式版本控制系统 git官网文档&#xff1a;https://git-scm.com/book/zh/v2 Git 有三种状态&#xff1a;已提交&#xff08;committed&#xff09;、已修改&#xff08;modified&#xff09; 和 已暂存&#xff08;sta…

物联网竞赛板CubMx全部功能简洁配置汇总

目录 前言&#xff1a;1、按键&LED灯配置&#xff1a;2、OLED配置&#xff1a;3、继电器配置&#xff1a;4、LORA模块配置&#xff1a;5、矩阵模块&#xff1a;6、串口模块&#xff1a;7、RTC配置&#xff1a;8、ADC模块配置&#xff1a;9、温度传感器模块&#xff1a;后续…

openlayers 入门教程(二):map 篇

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

perl 用 XML::DOM 解析 Freeplane.mm文件,生成测试用例.csv文件

Perl 官网 www.cpan.org 从 https://strawberryperl.com/ 下载网速太慢了 建议从 https://download.csdn.net/download/qq_36286161/87892419 下载 strawberry-perl-5.32.1.1-64bit.zip 约105MB 解压后安装.msi&#xff0c;装完后有520MB&#xff0c;建议安装在D:盘。 运行 …