每日leetcode--接雨水
引言
接雨水问题是一个经典的算法问题,它要求我们计算给定一组不同高度的墙壁时,这些墙壁之间能够蓄积多少雨水。解决这个问题的方法有很多,其中一种常见的解法是通过辅助数组来记录每个位置的左右最大高度,并计算每个位置上方能够蓄积的雨水量。
问题描述
假设我们有一个非负整数数组height
,其中每个元素表示墙壁的高度。我们需要计算这些墙壁之间能够蓄积多少雨水。
题目链接:. - 力扣(LeetCode)
思路:辅助数组法
接下来,我们将介绍一种解决接雨水问题的常见方法,即通过辅助数组来记录每个位置的左右最大高度,并计算每个位置上方能够蓄积的雨水量。
python代码
class Solution:def trap(self, height: List[int]) -> int:# left, right 分别存储一点左,右边最高墙壁left=[]right=[]#ans为返回值ans=0lmax, rmax=0,0left.append(0)for i in range(1,len(height)):lmax=max(lmax, height[i-1])left.append(lmax)right.append(0)for i in range(len(height)-2, -1, -1):rmax=max(rmax, height[i+1])right.append(rmax)right=right[::-1]print(f"left={left}")print(f"righ={right}")for i in range(len(height)):ans+=max(0, min(left[i], right[i])-height[i])return ans
详细步骤解释:
- 我们首先创建了两个辅助数组
left
和right
,用于分别存储每个位置的左侧和右侧最大高度。 - 然后我们通过遍历数组,计算每个位置的左侧最大高度,并将结果存入
left
数组中。 - 接着,我们通过逆序遍历数组,计算每个位置的右侧最大高度,并将结果存入
right
数组中。 - 将
right
数组进行反转,以便与left
数组对应位置进行比较。 - 最后,我们再次遍历数组,计算每个位置上方能够蓄积的雨水量,并累加到变量
ans
中。 - 最终,我们返回计算得到的雨水总量
ans
作为结果。
示例与分析: 假设我们有一个高度数组[0,1,0,2,1,0,1,3,2,1,2,1]
,使用上述算法进行计算可以得到结果为6
。具体的计算过程如下:
height=[0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]
left = [0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
right = [3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 0]
#计算每个位置上方能够蓄积的雨水量:
[0, 0, 1, 0, 1, 2, 1, 0, 1, 0, 0, 0]
从示例中可以看出,计算得到的雨水总量为6
,即该数组表示的墙壁之间能够蓄积的雨水量。
复杂度分析:
- 时间复杂度:该算法需要遍历两次输入数组,分别计算左右最大高度,以及遍历一次数组计算每个位置上方的雨水量。因此,时间复杂度为O(n),其中n是输入数组的长度。
- 空间复杂度:该算法使用了两个额外的辅助数组
left
和right
,它们的长度与输入数组相同。因此,空间复杂度为O(n)。
结论: 通过辅助数组法,我们可以有效地解决接雨水问题。该方法利用了辅助数组存储每个位置的左右最大高度,并通过遍历数组计算每个位置上方能够蓄积的雨水量。这种方法简单、直观,并且具有较好的时间复杂度和空间复杂度。
展望: 除了辅助数组法之外,还有其他解决接雨水问题的方法。例如,可以使用双指针法、栈等数据结构来解决该问题。在未来的研究和实践中,我们可以进一步探究这些方法,并比较它们的优缺点,以寻找更加高效的解决方案。
详细题解:. - 力扣(LeetCode)
相关文章:
每日leetcode--接雨水
引言 接雨水问题是一个经典的算法问题,它要求我们计算给定一组不同高度的墙壁时,这些墙壁之间能够蓄积多少雨水。解决这个问题的方法有很多,其中一种常见的解法是通过辅助数组来记录每个位置的左右最大高度,并计算每个位置上方能…...

redis 性能优化一
目录 前言 尾延迟 前言 说到redis 性能优化,优化的目的是什么?提高响应,减少延迟。就要关注两点,一是尾延迟,二是Redis 的基线性能。只有指标,我们的优化,才有意义,才能做监控以及…...
柔性数组(变长数组)介绍
柔性数组简介 柔性数组,或称为可变长度数组,是一种在C语言结构体定义中使用的特殊数组,它允许结构体拥有一个可变大小的数组成员。柔性数组成员必须是结构体的最后一个成员,且它不占用结构体大小的计算,这使得可以动态…...
AMS、PMS和WMS学习链接
原文: Framework学习(三)之PMS、AMS、WMS_ams pms-CSDN博客 1:PackageMangerService(PMS)讲解博主 PMS系列我觉得csdn博主jeanboy讲的非常好,这里附上博主的博客链接jeanboy。这是一位资深级的博客专家。关于他PMS的讲…...
typedef 在枚举类型enum的使用方式
enum类型用途:为程序中的一组相关的常量取名字,以便以程序的可读性和维护性 方式一:typedef enum 变量名{E_XXXXX = 0,E_xxxx,E_XXXX_MAX }变量名_e; 方式二: typedef enum {E_xxxx = 0,E_xxxx,E_xxx_MAX}变量名_e;#include <stdio.h> typedef enum vii_vpp_mode {E_…...

DDD领域模型驱动
传统MVC架构 DDD架构: api层:api请求方式,透传【传递参数】,几个业务对应api 业务层:做编排,业务里要有哪些服务,执行顺序是什么,以及怎么做 领域层:负责领域内调用,然后领域怎么划分 Dao层:数据库操作【或者另外一个应用 数据源之类的】 遵守原则: ①允许跨层…...

基于pytest的证券清算系统功能测试工具开发
需求 1.造测试数据:根据测试需要,自动化构造各业务场景的中登清算数据与清算所需起来数据 2.测试清算系统功能: 自动化测试方案 工具设计 工具框架图 工具流程图 实现技术 python, pytest, allure, 多进程,mysql, 前端 效果 测…...

土地利用数据分类过程教学/土地利用分类/遥感解译/土地利用获取来源介绍/地理数据获取
本篇主要介绍如何对影像数据进行分类解译,及过程教学,示例数据下载链接:数据下载链接 一、背景介绍 土地是人类赖以生存与发展的重要资源和物质保障,在“人口-资源-环境-发展&#x…...

图【数据结构】
文章目录 图的基本概念邻接矩阵邻接表图的遍历BFSDFS 图的基本概念 图是由顶点集合及顶点间的关系组成的一种数据结构 顶点和边:图中结点称为顶点 权值:边附带的数据信息 路径 : 简单路径 和 回路: 子图:设图G {V, E}和图G1…...

整块代码自动生成、智能括号匹配……CodeGeeX编程提效,功能再升级!
CodeGeeX插件功能持续打磨,希望成为开发者更高效的智能编程工具,提高开发速度和代码质量。今天介绍VSCode中最新的v2.4.0版本插件新功能,让你在编写代码时更加得心应手。 一、新增block代码块生成的设置 CodeGeeX插件中,以往针对…...
java实现计算ROUGE-L指标(一)
ROUGE (Recall-Oriented Understudy for Gisting Evaluation) 是用于评估自动文摘或机器翻译的一种评估方法,其中的ROUGE-L指标是基于最长公共子序列(Longest Common Subsequence,LCS)来计算的 我们做AI问答系统,需要一…...

LLM之RAG实战(二十九)| 探索RAG PDF解析
对于RAG来说,从文档中提取信息是一种不可避免的场景,确保从源文件中提取出有效的内容对于提高最终输出的质量至关重要。 文件解析过程在RAG中的位置如图1所示: 在实际工作中,非结构化数据比结构化数据丰富得多。如果这些海量数据无…...
C while 和 do while 区别
while 和 do while 都是 C 语言中的循环语句,它们的主要区别在于循环体执行的顺序。 while 循环首先检查循环条件,只有当条件为真时才执行循环体。因此,如果条件一开始就为假,那么循环体将永远不会执行。而如果条件一直为真&…...

力扣每日一题 在受污染的二叉树中查找元素 哈希 DFS 二进制
Problem: 1261. 在受污染的二叉树中查找元素 思路 👨🏫 灵神题解 💖 二进制 时间复杂度:初始化为 O ( 1 ) O(1) O(1);find 为 O ( m i n ( h , l o g 2 t a r g e t ) O(min(h,log_2target) O(min(h,log2targ…...
安卓Java面试题 91- 100
91. 请描述一下Intent 和 IntentFilter ?Intent是组件的通讯使者,可以在组件间传递消息和数据。 IntentFilter是intent的筛选器,可以对intent的action,data,catgory,uri这些属性进行筛选,确定符合的目标组件🚀🚀🚀🚀🚀🚀92. 阐述什么是IntentService?有何优…...

BM1684X搭建sophon c++环境
1:首先安装编译好sophon-sail 比特大陆BM1684X开发环境搭建--SOC mode-CSDN博客 2:在将之前配置的soc-sdk拷贝一份到sdk根目录,将交叉编译好的sail中的build_soc拷贝至soc-sdk文件夹内; cp -rf build_soc/sophon-sail/inlcude soc-sdk cp -rf build_soc…...
UDP通讯测试
参考资料:UNIX网络编程 实验平台:PC为client,RaspberryPi为server 基本类型和接口函数,参考man手册 #include <sys/socket.h>struct sockaddr {sa_family_t sa_family; /* Address family */char sa_data[]; /* Socket address */};#inclu…...

Linux - 进程间通信
1、进程间通信介绍 1.1、进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程;资源共享:多个进程之间共享同样的资源;通知事件:一个进程需要向另一个或一组进程发送消息,通知它(…...
代码随想录算法训练营第七天|454. 四数相加 II
454. 四数相加 II 已解答 中等 相关标签 相关企业 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 …...
蓝桥杯刷题(五)
[蓝桥杯 2022 省 B] 刷题统计 题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a a…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...