【Hot100刷题计划】Day04 栈专题 1~3天回顾(持续更新)
- LeetCode Hot 100 是最常被考察的题目集合,涵盖了面试中常见的算法和数据结构问题。
- 刷 Hot100可以让你在有限的时间内集中精力解决最常考的问题。
- 鼓励大家不仅要写出代码,最好理解问题的本质、优化解法和复杂度分析。
- 遇到问题要多交流多求问多分享,“多折腾”能加深印象。欢迎留言交流~
Hot100 刷题计划 Day04
- Day4 栈专题
Day4 栈专题
4天为一个周期学习,3天刷题,1天回顾。今天就是第4天了,我们复习之前,带着刷下较简单的数据结构——栈。
20. 有效的括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
思路:
栈是先入后出,匹配括号也是找最后相对应的。只有3种括号,在看到左括号压栈的时候,直接使用待匹配的右括号。只需要找到后续与栈顶元素相同的右括号出栈。最后栈为空则有效。
class Solution:def isValid(self, s: str) -> bool:stack = []for i in s:if i == '(':stack.append(')') # 将待匹配的括号分别压入栈elif i == '[':stack.append(']')elif i == '{':stack.append('}')elif not stack or i != stack[-1]: # 如果还有括号未匹配,栈为空或者不匹配return Falseelse:stack.pop() # 匹配成功,栈顶元素出栈return True if not stack else False # 栈为空,则有效;反之无效
155. 最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
- MinStack() 初始化堆栈对象。
- void push(int val) 将元素val推入堆栈。
- void pop()删除堆栈顶部的元素。
- int top() 获取堆栈顶部的元素。
- int getMin() 获取堆栈中的最小元素。
pop、top 和 getMin 操作总是在 非空栈 上调用。
思路: 要快速找栈中的最小值。栈先进后出,可以在每个元素位置维护之前元素最小值,栈顶标记则为栈最小值。
class MinStack:def __init__(self):self.stack = [(0, inf)] # 除了栈元素,还维护一个最小值def push(self, val: int) -> None:self.stack.append((val, min(self.stack[-1][1], val)))def pop(self) -> None:self.stack.pop()def top(self) -> int:return self.stack[-1][0]def getMin(self) -> int:return self.stack[-1][1]# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(val)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()
394. 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。
思路: 栈匹配的问题,核心是遇到“ [ ”入栈,遇到“ ] ”出栈。记录下的res需要匹配数字,所以入栈需要记录下数字。还需要之前的字符串才能得到结果(相当于递归的更深一层返回值)。
class Solution:def decodeString(self, s: str) -> str:res = "" # 当前解码结果multi = 0 # 当前数字stack = [] # 栈,用于存储 [数字, 之前的解码结果]for char in s:if char.isdigit(): # 如果是数字字符multi = multi * 10 + int(char) # 计算数字elif char == '[': # 遇到 '[',将当前数字和解码结果入栈stack.append([multi, res])multi, res = 0, "" # 重置数字和解码结果elif char == ']': # 遇到 ']',出栈并更新解码结果cur_multi, last_res = stack.pop()res = last_res + cur_multi * res # 拼接字符串更新解码结果(从最后一个右括号开始,res开始找栈)else: # 普通字符,直接拼接到解码结果res += charreturn res
739. 每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
思路: 使用一个栈记录目前待匹配元素,遍历数组,如果遇到大于栈顶元素的值就持续对比,更新ans.
class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:stack = [0] # 使用单调栈记录未匹配找到更大值的元素ans = [0] * len(temperatures) # 所有位置初始化为0for i in range(1, len(temperatures)):# 如果当前元素比栈顶元素要大,匹配到就更新ans,并弹出栈中已匹配元素,继续对比while stack and temperatures[i] > temperatures[stack[-1]]:ans[stack[-1]] = i - stack[-1]stack.pop()# 所有元素都要入栈,往后匹配更大值stack.append(i)return ans
相关文章:
【Hot100刷题计划】Day04 栈专题 1~3天回顾(持续更新)
LeetCode Hot 100 是最常被考察的题目集合,涵盖了面试中常见的算法和数据结构问题。刷 Hot100可以让你在有限的时间内集中精力解决最常考的问题。鼓励大家不仅要写出代码,最好理解问题的本质、优化解法和复杂度分析。遇到问题要多交流多求问多分享&#…...
用VBA将word文档处理成支持弹出式注释的epub文档可用的html内容
有一种epub文件,其中的注释以弹窗形式显示,如下图: 点击注释引用后,对应的注释内容会弹出在页面中显示,再次点击弹窗外的任意位置该弹窗即关闭,关闭后点击任意注释引用,对应的注释内容会弹窗显示…...
舵机原理介绍 简洁讲解面向实战 非阻塞式驱动代码, arduino
目录 1.舵机简介 2.舵机转动角度的PWM条件(以180度的SG90舵机为例) 2.1 控制关系 2.2arduino产生PWM 3.0 附代码 循环0度到180度开关舵机(非阻塞版本) 4.0 Servo.h 舵机代码 1.舵机简介 舵机也叫伺服电机,是控制输入PWM信号来精确控制转动角度.所以想要驱动舵机就是让ard…...
Oracle Database 23ai 中的DBMS_HCHECK
在 Oracle 23ai 中,DBMS_HCHECK 包允许我们检查数据库中已知的数据字典问题。 几年前,Oracle 发布了 hcheck.sql 脚本(文档 ID 136697.1)来检查数据库中已知的数据字典问题。 DBMS_HCHECK 包意味着我们不再需要下载 hcheck.sql…...
如何利用AWS监听存储桶并上传到tg bot
业务描述: 需要监听aws的存储中的最新消息,发送新的消息推送到指定tg的频道。 主要流程: 1.上传消息到s3存储桶(不做具体描述) 2.通过aws的lambda监听s3存储桶的最新消息(txt文件) 3.将txt文件…...
STM32 SPI读取SD卡
七个响应类型: R1 Response (Normal Response): R1响应是最基本的响应,包含一个字节的状态位,用于指示命令是否成功执行。常用。最高位为0。最低位为1表示是空闲状态。其他位是各种错误提示。 R1b Response (Normal with Busy): 类似于R1&a…...
TANGO与LabVIEW控制系统集成
TANGO 是一个开源的设备控制和数据采集框架,主要用于管理实验室设备、自动化系统和工业设备。它为不同类型的硬件提供统一的控制接口,并支持设备之间的通信,广泛应用于粒子加速器、同步辐射光源、实验室自动化和工业控制等领域。 1. TANGO的核…...
eth_type_trans 函数
eth_type_trans 是 Linux 内核网络子系统中的一个函数,它主要用于确定接收到的以太网数据包(Ethernet frame)的协议类型,并设置相应的 sk_buff 结构体的协议字段。以下是关于 eth_type_trans 的详细解释: 功能 eth_type_trans 函数的主要功能是根据以太网数据包的目的 M…...
派克汉尼汾推出新的快换接头产品系列,扩展热管理解决方案
近期,运动与控制技术领域的先行者——派克汉尼汾宣布推出四个具有开创性的热管理解决方案——NSAC、NSEC和NSIC系列盲插式快换接头以及NSSC螺纹连接快换接头。这些创新产品旨在满足电子冷却、电池制造、信息技术、能源管理、工程机械和运输等行业复杂的热管理需求。…...
uniapp 前端解决精度丢失的问题 (后端返回分布式id)
原因: 后端使用分布式id, id为19位数,导致精度丢失 ,前端解决方法 这个是通过浏览器请求回来的数据,这个时候id 数据已经丢失了,在数据库查询不到,在调获详情接口的时候会有问题 实际的: 解决…...
C语言:指针4(常量指针和指针常量及动态内存分配)
常量指针与指针常量 常量:分为字面量和只读常量,字面量就是我们平时直接操作的量: printf("%d\n",12);/printf("%s\n","hello");只读常量使用关键字 const 修饰,凡是被这个关键字修饰 的变量&…...
Win11提示fveapi.dll丢失是什么原因?fveapi.dll丢失怎么办?
一、fveapi.dll丢失的成因与影响 成因: 系统更新不完整:Win11系统在更新过程中,如果某个环节出现问题,可能会导致fveapi.dll等系统文件未能正确更新或安装。软件冲突:某些第三方软件可能与系统文件发生冲突ÿ…...
台球助教平台系统开发APP和小程序信息收藏功能需求解析(第十二章)
以下是开发台球助教系统客户端(APP,小程序,H5)几端的信息收藏功能的详细需求和功能说明,内容比较详细,可以说是一个教科书式的详细说明了,这套需求说明不仅仅用在我们的台球助教系统程序上&…...
如何设计 Vue 3 组件库:高效的组件化开发方法
如何设计 Vue 3 组件库:高效的组件化开发方法 📖 前言 随着前端技术的不断发展,Vue.js 已成为现代化 Web 应用开发的主流框架之一。Vue 3 引入了诸多改进,尤其是组合式 API,使得 Vue 在开发大型项目时,能够…...
第八节、Bresenham直线插补运动【51单片机-L298N-步进电机教程】
摘要:前面章节主要介绍单个电机控制,本节内容介绍两个电机完成直线插补运动 一、 Bresenham直线算法介绍 Bresenham直线算法由Jack Elton Bresenham于1962年在IBM开发,最初用于计算机显示直线,它确定应该选择的n维光栅的点&#…...
一个从oracle使用spool导出数据到kadb的脚本
1. dump_data.sh调用sql_dump.sh导出数据 2. load_data.sh将导出的数据加载至KADB 1. dump_data.sh #!/bin/bash begin_time$(date %Y%m%d -d -1 day) end_time$(date %Y%m%d) echo "数据导出日期:"$begin_time echo "数据导出日期:"$begin_time >>…...
【STM32】GPIO口以及EXTI外部中断
个人主页~ 有关结构体的知识在这~ 有关枚举的知识在这~ GPIO口以及EXTI外部中断 GPIO一、简介二、基本结构三、输入输出模式1、输入模式(1)上拉输入(2)下拉输入(3)浮空输入(4)模拟输…...
Confluent Cloud Kafka 可观测性最佳实践
Confluent Cloud 介绍 Confluent Cloud 是一个完全托管的 Apache Kafka 服务,提供高可用性和可扩展性,旨在简化数据流处理和实时数据集成。用户可以轻松创建和管理 Kafka 集群,而无需担心基础设施的维护和管理。Confluent Cloud 支持多种数据…...
【LeetCode每日一题】——415.字符串相加
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 415.字符串相加 四【题目描述】 给定两个字符…...
linux---使用定时任务同步时间
首先,确保你的系统上安装了ntpdate工具,它用于从NTP服务器获取并设置系统时间。如果你的系统上没有安装,你可以通过包管理器进行安装 安装ntpdate yum install -y ntpdate设置定时任务 crontab -e在文件中添加下面内容 #每5分钟同步一次时间 …...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门  是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
