力扣42.接雨水
力扣42.接雨水
前后缀数组
-
对于每个一个位置
- 求其前面最高高度pre_max[i] = max(pre_max[i-1] , h[i])
- 和后面最高高度suf_max[i] = max(suf_max[i+1] , h[i])
- 当前i处的水容量 为min(pre_max[i] , suf_max[i]) - h[i]
-
class Solution {public:int trap(vector<int>& height) {int n = height.size();vector<int> pre_max(n),suf_max(n);pre_max[0] = height[0];suf_max[n-1] = height[n-1];for(int i=1;i<n;i++)pre_max[i] = max(pre_max[i-1],height[i]);for(int i=n-2;i>=0;i--)suf_max[i] = max(suf_max[i+1],height[i]);int res=0;for(int i=0;i<n;i++)res += min(pre_max[i],suf_max[i]) - height[i];return res;}};
双指针
-
考虑不用数组存pre_max和suf_max而改用实时更新
- 每到达一个位置时 更新pre_max和suf_max
- 若pre_max < suf_max 说明当前水容量为 pre_max(小的) - h[i]
- 反之亦然
-
class Solution {public:int trap(vector<int>& height) {int n = height.size();int l = 0,r = n-1;int res=0;int pre_max = 0,suf_max = 0;while(l <= r){pre_max = max(pre_max,height[l]);suf_max = max(suf_max,height[r]);if(pre_max < suf_max){res += pre_max - height[l];l ++;}else{res += suf_max - height[r];r --;}}return res;}};
相关文章:

力扣42.接雨水
力扣42.接雨水 前后缀数组 对于每个一个位置 求其前面最高高度pre_max[i] max(pre_max[i-1] , h[i])和后面最高高度suf_max[i] max(suf_max[i1] , h[i])当前i处的水容量 为min(pre_max[i] , suf_max[i]) - h[i] class Solution {public:int trap(vector<int>& …...

国产数据库与MYSQL兼容性?开发应该怎么选择?
国产数据库主要包括以下几种: TiDB:由 PingCAP 公司研发设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用等特性。 华为GaussDB…...

Spring框架中Bean的生命周期
Bean的生命周期通常指的是从创建到初始化,经过一系列的流程,最终销毁的过程。只不过,在Spring框架中,Bean的生命周期是由Spring IOC容器来管理的。在Spring中,我们定义Bean时,也可以自己指定初始化和销毁的…...

从零到一学FFmpeg:avformat_alloc_output_context2 函数详析与实战
文章目录 前言一、函数原型二、功能描述三、使用场景四、AVFormatContext 结构体五、代码实例 前言 avformat_alloc_output_context2 是FFmpeg库中的一个函数,用于为输出多媒体文件初始化一个AVFormatContext结构体。这个函数在开始输出音频、视频数据到文件之前被…...

Lua 绕过元表
Lua 绕过元表,直接访问 table 的字段。 绕过元表 rawset(table, index, value),在不触发元方法的情况下,设置 table[index] 的值为 value。 rawget(table, index),在不触发元方法的情况下,获取 table[index] 的值。…...

pip方法总结(极简快速掌握)
pip是Python的包管理工具,它允许用户从PyPI等源安装和管理额外的库和依赖。以下是关于pip使用方法的详细总结,同时附上代码演示: 一、pip的基本功能 安装包:使用pip install 包名命令可以安装指定的Python包。例如,要…...

aigc基础概念(一)
目录 一、AI 1.1、基本术语 1、Artificial Intelligence (AI) —— 人工智能 2、Generative AI —— 生成性人工智能 3、Machine Learning (ML) —— 机器学习 4、Deep Learning (DL) —— 深度学习 5、Large Language Model (LLM) —— 大型语言模型 6、Transformers …...

USB学习——12、usb初始化和插拔驱动软件流程大致框架描述
usb初始化和插拔驱动软件流程大致框架描述: 当设备启动时,usb的主机控制器设备驱动(HCD)和 usb的root hub会先初始化: 1、xhci-plat.c主机控制器驱动那里,__usb_creat_hcd创建usb主机数据结构,m…...

【ARMv8/ARMv9 硬件加速系列 2.4 -- ARM NEON Q寄存器与V寄存器的关系】
文章目录 Q 与 V 的关系向量寄存器 v 的使用赋值操作寄存器赋值总结Q 与 V 的关系 在ARMv8/v9架构中,v寄存器和q寄存器实际上是对相同的物理硬件资源的不同称呼,它们都是指向ARM的SIMD(单指令多数据)向量寄存器。这些寄存器用于高效执行向量和浮点运算,特别是在多媒体处理…...

Oracle中递归查询(START WITH……CONNECT BY……)
一、基本语法 在Oracle中START WITH……CONNECT BY……一般用来查找存在父子关系的数据,也就是树形结构的数据。 SELECT * FROM TABLE WHERE 条件3 START WITH 条件1 CONNECT BY 条件2;start with [condition]:设置起点,用来限制第一层的数…...

【云原生|K8S系列】如何创建Kubernetes job和Cronjobs 入门指南
本kubernetes教程解释了如何创建kubernetes作业和cronjobs,以及它的基础知识、用例和一些提示和技巧。 什么是Kubernetes Job? Kubernetes job和cronjob是Kubernetes对象,主要用于短期和批处理工作负载。 kubernetes作业对象基本上部署了一个pod&…...

力扣每日一题 6/23 字符串/模拟
博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 520.检测大写字母【简单】 题目: 我们定义,在以下…...

Google trend搜索关键词
Google trend地址:https://trends.google.com/trends/?geoUS&hlzh-CN 1、具体的操作步骤如下: 2、Google trend搜索页面如下:...

Unity C#调用Android,IOS震动功能
最近在Unity上需要很原生移动端进行交互, 原理:新建一个android项目,把生成的app module给干掉,然后留下一个vibrationPlugin module,在这个module下写android震动代码,将这个android工程构建出来的 aar移…...

Ruby 注释
Ruby 注释 在编程中,注释是用于解释代码如何工作以及为什么这样编写的重要工具。Ruby作为一种解释型、面向对象的脚本语言,提供了灵活的注释方式,帮助开发者更好地组织和理解代码。本文将详细介绍Ruby中的注释类型、用法以及最佳实践。 Rub…...

C语言入门系列:特殊的main函数和exit函数
文章目录 一,main函数二,exit函数1,exit函数2,atexit()函数2.1 atexit函数的简介2.2 atexit注册的函数一定会被调用吗2.2.1 正常退出测试2.2.2 异常退出测试 一,main函数 一个C程序至少包含一个函数,这个函…...

JAVA复习3
目录 19. 下列关于 do…while 语句和 while 语句的叙述中错误的是( C ) 20. 若有定义 int a9, b6; System.out.println(a > b) 的结果是( D ) 21. 关于接口和抽象类,下列说法正确的是(A) …...

Oracle共享内存不释放
Oracle数据库使用共享内存来管理其系统全局区(SGA)和程序全局区(PGA)。当Oracle数据库的共享内存没有正确释放时,可能会导致数据库启动失败或性能问题。以下是一些可能的原因和解决方法: /dev/shm空间不足&…...

windows cmd中单引号和双引号的问题
文章目录 前言单引号和双引号的用法单引号双引号 示例对比Linux ShellWindows CMD PowerShell中的引号用法结论 前言 这个问题的起因是在windows cmd中运行一个简单的命令 node -e console.log(process)发现没有输出,但是进入node环境后,直接执行conso…...

Nacos 2.x 系列【15】数据源插件支持达梦、Oracel、PostgreSQL......
文章目录 1. 概述2. 持久层机制2.1 固定语句2.2 数据源插件 3. 案例演示3.1 编译已实现插件3.2 自定义插件3.3 数据库初始化3.4 插件引入3.4.1 方式一:引入到源码3.4.2 方式二:插件加载目录 3.5 修改配置3.6 测试 1. 概述 在实际项目开发中,…...

HJ39判断两个IP是否属于同一子网(中)
提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 接上文HJ39判断两个IP是否属于同一子网 查了下,atoi可以转换负数。 修改成下面的代码 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>bool isTargetSonN…...

渗透测试基础(二) Linux+Win常用命令介绍
1. Linux常用命令 1.1 解压缩相关 1.1.1 tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName1.1.2 gz命令 对于.gz格式的解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileN…...

手机usb共享网络电脑没反应的方法
适用于win10电脑,安卓手机上可以 开启usb网络共享选择,如果选择后一直跳,让重复选择usb选项的话,就开启 开发者模式,进到 开发者模式 里设置 默认usb 共享网络 选项 ,就不会一直跳让你选。 1.先用数据线 连…...

Scrivener v3 解锁版安装教程 (写作辅助软件)
前言 Scrivener,一个多功能的写作软件,被世界各地的作家广泛采用,从小说家到剧本家,再到非小说类作家和学术研究者,它的用户群跨越了广泛的领域,包括学生、法律专业人士、记者和翻译。这个软件非常注重用户…...

Python开发——用什么数据储存结构复杂的数据
在Python中,当需要储存包含不同类型的数据时,可以使用以下几种数据结构: 1. 字典(dict) 字典是一种非常灵活的数据结构,允许使用键-值对来存储不同类型的数据。 data {"name": "Alice&quo…...

【0-1系列】从0-1快速了解搜索引擎Scope以及如何快速安装使用(下)
前言 近日,社区版家族正式发布V2024.5版本,其中,社区开发版系列重磅发布Scope开发版以及StellarDB开发版。 为了可以让大家更进一步了解产品,本系列文章从背景概念开始介绍,深入浅出的为读者介绍Scope的优势以及能力…...

前端核心框架Vue指令详解
目录 ▐ 关于Vue指令的介绍 ▐ v-text与v-html ▐ v-on ▐ v-model ▐ v-show与v-if ▐ v-bind ▐ v-for ▐ 前言:在学习Vue框架过程中,大家一定要多参考官方API ! Vue2官方网址https://v2.cn.vuejs.org/v2/guide/ ▐ 关于Vue指令的…...

SD卡无法读取?原因分析与数据恢复策略
一、SD卡无法读取的困境 SD卡作为便携式的存储介质,广泛应用于手机、相机、平板等多种电子设备中。然而,在使用过程中,我们可能会遭遇SD卡无法读取的困扰。当我们将SD卡插入设备时,设备无法识别SD卡,或者虽然识别了SD…...

线程池的工作原理
线程池可以减少创建和销毁线程的次数,从而减少系统资源的消耗。当一个任务(Runnable或Callable对象)(Runnable无返回值,Callable有返回值)被提交到线程池时: 一、首先判断核心线程池中的线程是…...

Nikto一键扫描Web服务器(KALI工具系列三十)
目录 1、KALI LINUX 简介 2、Nikto工具简介 3、信息收集 3.1 目标IP(服务器) 3.2kali的IP 4、操作实例 4.1 基本扫描 4.2 扫描特定端口 4.3 保存扫描结果 4.4 指定保存格式 4.5 连接尝试 4.6 仅扫描文件上传 5、总结 1、KALI LINUX 简介 Kali Linux 是一…...