LeetCode详解之如何一步步优化到最佳解法:20. 有效的括号
LeetCode详解系列的总目录(持续更新中):
LeetCode详解之如何一步步优化到最佳解法:前100题目录(更新中...)-CSDN博客
LeetCode详解系列的上一题链接:
LeetCode详解之如何一步步优化到最佳解法:14. 最长公共前缀_leetcode 14-CSDN博客
目录
LeetCode详解系列的总目录(持续更新中):
LeetCode详解系列的上一题链接:
20. 有效的括号
解法1:暴力解法
解法1思路:
代码:
解法性能:
优化思路:
解法2:最终版
代码:
解法性能:
20. 有效的括号
本题题目链接:20. 有效的括号 - 力扣(LeetCode)
解法1:暴力解法
解法1思路:
从题目中,我们看出来,总共有3对括号,这种mapping关系我们可以用字典来存储,方便我们用O(1)的复杂度来查询。并且,对于每一个左括号,一方面,不一定有对应的右括号与之配对;另一方面,即使有这样的右括号,很大概率这个右括号不是字符串中的下一个字符。因此,我们需要有一个地方来存储还没有配对的括号,我们可以使用一个列表来存储这些信息。接着,我们开始遍历输入的字符串。
对于每一个字符,假如当前列表为空的话,我们需要判断这个字符对应的括号是左括号,还是右括号,因为输入的字符串有效的条件之一为“每个右括号都有一个对应的相同类型的左括号”,那么,如果当前的括号是右括号的话,我们就可以直接判断字符串不是有效的(因为列表为空,前面没有与之配对的左括号);如果当前的括号是左括号,我们就将其存储到列表中。
如果当前列表不为空的话,若当前的括号为右括号,我们需要判断列表中最后一个括号是不是和这个右括号是配对的,如果是的话,则配对成功,移除列表中最后一个括号;否则,输入的字符串不是有效的(因为当前的这个右括号没有与之配对的左括号,题目中指出字符串有效的条件之一为“左括号必须以正确的顺序闭合”)。若当前括号为左括号,则将这个括号存到列表中。
等遍历完字符串后,假如列表是非空的,说明还有没配对的括号,输入的字符串不是有效的;否则,输入的字符串是有效的。具体的代码如下所示:
代码:
class Solution:def isValid(self, s: str) -> bool:store = []mapping = {")": "(","}": "{","]": "["}for kuohao in s:if not store:if kuohao == ")" or kuohao == "}" or kuohao == "]":return Falsestore.append(kuohao)else:if kuohao in mapping.keys():if store[-1] != mapping[kuohao]:return Falseelse:store.pop()else:store.append(kuohao)if store:return Falseelse:return True
解法性能:
优化思路:
在上面的代码中,我们发现,在遍历字符串时,不论当前列表是空,还是非空,我们都是对如果当前括号是右括号的情况进行判断处理,而对当前括号是左括号的情况,则直接放进列表中。那么,我们是不是可以将操作进行合并,先处理右括号和左括号的情况。如果是右括号的话,再处理列表是空,还是非空的情况。优化后的代码如下所示:
解法2:最终版
代码:
class Solution:def isValid(self, s: str) -> bool:store = []mapping = {")": "(","}": "{","]": "["}for kuohao in s:if kuohao == ")" or kuohao == "}" or kuohao == "]":if not store:return Falseelse:if store[-1] != mapping[kuohao]:return Falseelse:store.pop()else:store.append(kuohao)if store:return Falseelse:return True
解法性能:
解法分析:
对比“解法2”和“解法1”的代码,我们可以发现,优化后的代码更加紧凑,逻辑更加清晰。代码紧凑,可以减少内存的消耗,因此,优化了这个指标。
相关文章:
LeetCode详解之如何一步步优化到最佳解法:20. 有效的括号
LeetCode详解系列的总目录(持续更新中): LeetCode详解之如何一步步优化到最佳解法:前100题目录(更新中...)-CSDN博客 LeetCode详解系列的上一题链接: LeetCode详解之如何一步步优化到最佳解法…...
LeetCode18四数之和
代码来源:代码随想录 /*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/ int com…...
《K230 从熟悉到...》无线网络
《K230 从熟悉到...》无线网络 STA模式 《庐山派 K230 从熟悉到...》无线网络 无线网络中通常是STA(Station,站点)和AP(Access Point,无线接入点)。 STA(站点) 定义:STA…...
去中心化指数(链上ETF)
去中心化指数(链上ETF) 核心概念 去中心化指数: 类似传统金融的ETF(交易所交易基金),通过一篮子代币分散投资风险,无需主动管理。 核心价值:降低研究成本、分散风险、自动化资产…...
LeeCode题库第1695题
项目场景: 给你一个正整数数组 nums ,请你从中删除一个含有 若干不同元素 的子数组。删除子数组的 得分 就是子数组各元素之 和 。 返回 只删除一个 子数组可获得的 最大得分 。 如果数组 b 是数组 a 的一个连续子序列,即如果它等于 a[l],…...
【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
🚀 LeetCode 热题 23:合并 K 个升序链表(详细解析) 📌 题目描述 LeetCode 23. Merge k Sorted Lists 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合…...
LeetCode hot 100—删除链表的倒数第N个节点
题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3&…...
超级科学软件实验室(中国) : Super Scientific Software Laboratory (SSSLab)
Super Scientific Software Laboratory (SSSLab) gitee 官网...
2025大唐杯仿真1——车联网
车联网 V2N是指车辆与网络 Uu接口是用户设备(UE)与基站之间的通信接口,用于终端和基站之间的通信 Uu接口可用的是N41频段,归属中国移动 车辆间交互是V2V,频段是PCS PC5接口是一种用于设备间直接通信(D2D…...
云资源合规基线:确保云环境安全与合规的完整指南
1. 引言 随着越来越多的企业将其IT基础设施迁移到云端,确保云资源的安全性和合规性变得至关重要。云资源合规基线是一套最佳实践和标准,旨在帮助组织维护安全、高效且符合法规要求的云环境。本文将深入探讨云资源合规基线的各个方面,为IT管理者和安全专业人士提供全面的指导。…...
1.0 软件测试全流程解析:从计划到总结的完整指南
软件测试全流程解析:从计划到总结的完整指南 摘要 本文档详细介绍了软件测试的完整流程,包括测试计划、测试设计、测试执行、测试报告和测试总结等主要阶段。每个阶段都从目标、主要工作、输出物和注意事项等方面进行了详细说明。通过本文档࿰…...
@reduxjs/toolkit 报错,解决
项目场景: 使用redux存储状态,写一个reducer 问题描述 报错:Uncaught Error: A case reducer on a non-draftable value must not return undefined import { createSlice } from "reduxjs/toolkit"; //错误写法 const counterS…...
C++蓝桥杯实训篇(二)
片头 嗨咯~小伙伴们!今天我们来一起学习算法和贪心思维,准备好了吗?咱们开始咯! 第1题 数位排序 对于这道题,我们需要自己写一个排序算法,也就是自定义排序,按照数位从小到大进行排序。 举一…...
YY forget password
YY forget password 老早以前的语音工具,游戏团队协作工具...
Kafka 如何解决消息堆积问题?
Kafka 的消息堆积问题是实际生产中经常遇到的情况,尤其在高并发、大流量、消费者故障或处理速度慢的情况下,非常容易出现。 下面我从诊断 解决方案 实战技巧三步帮你梳理清楚: 🔍 一、先判断:是否真的“堆积”&…...
如何通过优化HMI设计大幅提升产品竞争力?
一、HMI设计的重要性与竞争力提升 HMI(人机交互界面)设计在现代产品开发中扮演着至关重要的角色。良好的HMI设计不仅能够提升用户体验,还能显著增强产品的竞争力。在功能趋同的市场环境中,用户体验成为产品竞争的关键。HMI设计通…...
2025大唐杯仿真4——信令流程
Preamble请求...
MyBatis Plus 在 ZKmall开源商城持久层的优化实践
ZKmall开源商城作为基于 Spring Cloud 的高性能电商平台,其持久层通过 MyBatis Plus 实现了多项深度优化,涵盖分库分表、缓存策略、分页性能、多租户隔离等核心场景。以下是具体实践总结: 一、分库分表与插件集成优化 1. 分库分表策略 Sh…...
Qt多线程从基础到性能优化
一、为什么需要多线程开发 现代应用程序的性能需求 CPU多核架构的有效利用 复杂任务的解耦与响应式界面保持 二、Qt线程创建四大方式 1. 继承QThread重写run() class WorkerThread : public QThread {void run() override {// 耗时操作qDebug() << "Thread ID…...
Spring常见问题复习
############Spring############# Bean的生命周期是什么? BeanFactory和FactoryBean的区别? ApplicationContext和BeanFactory的区别? BeanFactoryAware注解,还有什么其它的Aware注解 BeanFactoryAware方法和Bean注解的方法执行顺…...
股票日数据使用_未复权日数据生成前复权日周月季年数据
目录 前置: 准备 代码:数据库交互部分 代码:生成前复权 日、周、月、季、年数据 前置: 1 未复权日数据获取,请查看 https://blog.csdn.net/m0_37967652/article/details/146435589 数据库使用PostgreSQL。更新日…...
【C++】从零实现Json-Rpc框架(2)
目录 JsonCpp库 1.1- Json数据格式 1.2 - JsonCpp介绍 • 序列化接口 • 反序列化接口 1.3 - Json序列化实践 JsonCpp使用 Muduo库 2.1 - Muduo库是什么 2.2 - Muduo库常见接口介绍 TcpServer类基础介绍 EventLoop类基础介绍 TcpConnection类基础介绍 TcpClient…...
JVM虚拟机篇(二):深入剖析Java与元空间(MetaSpace)
这里写目录标题 JVM虚拟机篇(二):深入剖析Java与元空间(MetaSpace)一、引言二、全面认识Java2.1 Java的起源与发展历程2.2 Java的特性2.2.1 简单性2.2.2 面向对象2.2.3 平台无关性2.2.4 健壮性2.2.5 安全性2.2.6 多线程…...
NDK开发:音视频处理基础
音视频处理基础 一、音视频基础 1.1 音视频基本概念 视频编码格式 H.264/AVCH.265/HEVCVP8/VP9AV1音频编码格式 AACMP3PCMOPUS封装格式 MP4FLVMKVTS1.2 音视频处理流程 视频处理流程 采集(Camera/Screen)预处理(美颜/滤镜)编码(H.264/H.265)封装传输/存储音频处理流程 …...
【数字电路】第一章 数制和码制
一、数码的基本概念 1.数制 2.码制 二、几种常用的数制 三、不同数制间的转换 八进制和十六进制间通常不直接进行转换,而是先转换成二进制或十进制然后再进行转换。 1.任意进制→十进制(N—十转换) 2.十进制→任意进制(十—N转换…...
软件工程面试题(二十九)
1、Internet的最顶级的商业域名叫什么? 答: .com 2、GC是什么,为什么要使用它? 垃圾回收 (garbage collection, GC) 一个跟踪过程,它传递性地跟踪指向当前使用的对象的所有指针,以便找到可以引用的所有对象,然后重新使用在此跟踪过程中未找到的任何堆内存。公共语言运行…...
6.第二阶段x64游戏实战-分析人物状态
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:5.第二阶段x64游戏实战-动态模块地址 人物状态是与角色相关的,如果…...
Synopsys:设计对象
相关阅读 Synopsyshttps://blog.csdn.net/weixin_45791458/category_12812219.html?spm1001.2014.3001.5482 对于Synopsys的EDA工具(如Design Compiler、PrimeTime、IC Compiler)等,设计对象(Design Objects)是组成整个设计的抽象表示&…...
Redis数据结构之Hash
目录 1.概述2.常见操作2.1 H(M)SET/H(M)GET2.2 HGETALL2.3 HDEL2.4 HLEN2.5 HEXISTS2.6 HKEYS/HVALS2.7 HINCRBY2.8 HSETNX 3.总结 1.概述 Hash是一个String类型的field(字段)和value(值)的映射表,而且value是一个键值对集合,类似Map<String, Map<…...
【VUE】RuoYi-Vue3项目结构的分析
【VUE】RuoYi-Vue3项目结构的分析 1. 项目地址2. RuoYi-Vue3项目结构2.1 整体结构2.2 package.json2.2.1 🧾 基本信息2.2.2 🔧 脚本命令(scripts)2.2.3 🌍 仓库信息2.2.4 📦 项目依赖(dependenc…...
libreoffice-help-common` 的版本(`24.8.5`)与官方源要求的版本(`24.2.7`)不一致
出现此错误的原因主要是软件包依赖冲突,具体分析如下: ### 主要原因 1. **软件源版本不匹配(国内和官方服务器版本有差距) 系统中可能启用了第三方软件源(如 PPA 或 backports 源),导致 lib…...
5.数据手册解读——共模电感
目录 1 共模电感的工作原理 2 核心参数解读 2.1 电气参数 2.2 阻抗特性 共模电感(Common mode Choke),也叫共模扼流圈,是在一个闭合磁环上对称绕制方向相反、匝数相同的线圈。理想的共模扼流圈对L(或N)与E之间的共模干扰具有抑…...
easy-poi 一对多导出
1. 需求: 某一列上下两行单元格A,B值一样且这两个单元格, 前面所有列对应单元格值一样的话, 就对A,B 两个单元格进行纵向合并单元格 1. 核心思路: 先对数据集的国家,省份,城市...... id 身份证进行排序…...
用C语言控制键盘上的方向键
各位同学,大家好!相信大家在学习C语言的过程中,都和我一样,经常使用scanf函数来接受字符,数字,这些标准输入信息,来实现自己设计的程序效果。 而我突然有一天(对就是今天)…...
第3课:状态管理与事件处理
第3课:状态管理与事件处理 学习目标 掌握useState Hook的使用理解组件事件处理机制实现表单输入与状态绑定完成任务添加功能原型 一、useState基础 1. 创建第一个状态 新建src/Counter.js: import { useState } from react;function Counter() {co…...
硬件工程师面试问题(五):蓝牙面试问题与详解
蓝牙技术作为物联网与智能设备的核心无线协议,其硬件设计能力直接影响产品连接稳定性、功耗及兼容性。面试是评估候选人射频电路设计、天线优化、协议栈调试等综合技能的关键环节,尤其在BLE低功耗设计、共存抗干扰等场景中,硬件工程师的实践经…...
leetcode4.寻找两个正序数组中的中位数
思路源于 LeetCode004-两个有序数组的中位数-最优算法代码讲解 基本思路是将两个数组看成一个数组,然后划分为两个部分,若为奇数左边部分个数多1,若为偶数左边部分等于右边部分个数。i表示数组1划分位置(i为4是索引4也表示i的左半…...
20250405在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统来适配gmac1
【暂时还没有解决让PRO-RK3566的eth0/gmac1开机就启动】 PRO-RK3566作为iperf服务器: rootrk3566-buildroot:/# ifconfig rootrk3566-buildroot:/# ifconfig -a rootrk3566-buildroot:/# ifconfig eth0 up rootrk3566-buildroot:/# ifconfig rootrk3566-buildroot:/…...
7. 记忆(Memory)机制:让AI拥有“短期记忆”与“长期记忆”
引言:当AI学会"记住你" 2025年某银行智能客服因无法记住用户身份,每次对话都要求重复验证,引发大量投诉。引入LangChain 记忆系统后,客户满意度提升62%。本文将基于MemorySaver与FAISS本地存储,教你构建符合…...
Chapter07_图像压缩编码
文章目录 图像压缩编码图像压缩编码基础图像压缩的基本概念信息相关信息冗余信源编码及其分类 图像编码模型信源编码器模型信源解码器模型 数字图像的信息熵信源符号码字平均长度信息熵信息量 变长编码费诺码霍夫曼编码 位平面编码格雷码 图像压缩编码 数字图像的压缩是指在满…...
网络安全之前端学习(css终章)
如大家所见,今天的文章就是css的最后一篇文章。那么话不多说,我们开始吧。本章内容比较杂,就是补充之前几章没讲到的。 关系选择器 之前我们讲到了很多选择器,这里补充一个关系选择器。 1.1后代选择器 后代选择器,…...
多线程代码案例 - 2
阻塞队列 阻塞队列,我们熟悉的概念是队列,即一种先进先出的数据结构。阻塞队列,就是基于普通队列做出的扩展。 特点 1. 线程安全的 2. 具有阻塞特性 (a)如果针对一个已经满了的队列进行入队列,此时入队操…...
Qt实现鼠标右键弹出弹窗退出
Qt鼠标右键弹出弹窗退出 1、鼠标右键实现1.1 重写鼠标点击事件1.2 添加头文件1.3 添加定义2、添加菜单2.1添加菜单头文件2.2创建菜单对象2.3 显示菜单 3、添加动作3.1添加动作资源文件3.2 添加头文件3.3 创建退出动作对象3.4菜单添加动作对象 4、在当前鼠标位置显示菜单4.1当前…...
AI绘画中的LoRa是什么?
Lora是一个多义词,根据不同的上下文可以指代多种事物。以下将详细介绍几种主要的含义: LoRa技术 LoRa(Long Range Radio)是一种低功耗广域网(LPWAN)无线通信技术,以其远距离、低功耗和低成本的特…...
LaTeX、KaTeX、Markdown 的用法
文章目录 1. LaTeX 用法概述1.1 LaTeX简介1.2 优点与应用场景2. LaTeX 基础语法2.1 文档结构2.2 文本格式化2.3 数学公式3. KaTeX 用法3.1 KaTeX简介3.2 基本使用方法3.2.1 引入KaTeX3.2.2 渲染数学公式3.2.3 自定义配置3.3 与LaTeX的兼容性4. Markdown 用法4.1 Markdown简介4.…...
Python 如何高效实现 PDF 内容差异对比
Python 如何高效实现 PDF 内容差异对比 1. 安装 PyMuPDF 库2. 获取 PDF 内容通过文件路径获取通过 URL 获取 3. 提取 PDF 每页信息4. 内容对比metadata 差异文本对比可视化对比 5. 提升对比效率通过哈希值快速判断页面是否相同早停机制多进程机制 6. 其他 最近有接触到 PDF 内容…...
JJJ:generic netlink例程分析
接嵌入式毕设、课设辅导、技术咨询,欢迎私信 完整代码:github代码仓链接 若想要和指定的generic netlink family通信,如: 994 static struct genl_family genl_ctrl __ro_after_init { // generic netlink子协议995 .module THIS_MODU…...
3D图像重建中Bundle Adjustment的推导与实现
介绍 捆集调整(Bundle Adjustment),也称为光束平差法,是一种利用来自多台相机的图像数据同时优化相机位置和姿态以及 3D 点位置的技术。该技术历史相当悠久,于 1958 年由 DC Brown1 首次提出。 最初这是美国空军正在进行的从航拍照片中恢复环境的研究,随着视觉SLAM和Sf…...
【代码模板】C语言如何修改文件权限?读写执行权限对应值是多少?(chmod(“./a.out“, 0741);bit 2 1 0表示 读 写 执行)
#include "stdio.h" #include "unistd.h"int main(int argc, char *argv[]) {if (chmod("./a.out", 0741) ! 0) {perror("Failed to set exec permission");return -1;}return 1; }0741中0是8进制,7是 0111, 4是…...
新版pycharm如何实现debug调试需要参数的python文件
在最顶上有这个选项 把鼠标移上去 点击号 选择python 具体长这样 名字随便取 script选择你要调试的python文件 脚本形参填入参数,如:--arg1 value1 --arg2 value2 点击应用确定 最后给文件打上断点,再点击调试按键,就可以调试了…...