当前位置: 首页 > news >正文

【Leedcode】栈和队列必备的面试题(第一期)

栈和队列必备的面试题(第一期)


文章目录

  • 栈和队列必备的面试题(第一期)
  • 一、题目
  • 二、思路(图解)
  • 三、存在的问题与隐患(报错提示)
    • (1)s中只有右括号,无左括号
    • (2)返回值处理
    • (3)销毁栈
  • 四、整体源代码
  • 总结


一、题目

在这里插入图片描述


Leedcode链接:https://leetcode.cn/problems/valid-parentheses/


在这里插入图片描述


二、思路(图解)

我们用 来实现这道题,具体如下图!


在这里插入图片描述

这里我们用到 栈 接口实现中的 Stackpush 接口!然后 s++


在这里插入图片描述

这里我们会用到 栈 接口实现中的 StacktopStackpop 接口!下面是 比较方法!


正确的就 s++,知道*s为NULL为止!
在这里插入图片描述


如果不匹配,直接返回 false!
在这里插入图片描述

出栈 + 入栈 + 取栈顶数据 + 比较方法 : 代码如下(示例):

typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->top = ps->capacity = 0;
}
void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->top = 0;
}
void StackPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, newCapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}
void StackPop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));--ps->top;
}
STDataType StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}
int StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
bool isValid(char * s)
{ST st;StackInit(&st);while(*s){if(*s == '('|| *s == '['|| *s == '{'){StackPush(&st , *s);s++;}else{STDataType top = StackTop(&st);StackPop(&st);if(*s == ')' && top != '('|| *s == ']' && top != '['|| *s == '}' && top != '{'){StackDestroy(&st);return false;}else{s++;}}}
}

三、存在的问题与隐患(报错提示)

如果现在提交代码,会出现以下的报错 + 问题


(1)s中只有右括号,无左括号

在这里插入图片描述

这里我们应该注意:如果没有左括号直接返回 false 即可!
在这里插入图片描述

代码如下(示例):

while(*s){if(*s == '('|| *s == '['|| *s == '{'){StackPush(&st , *s);s++;}else{//如果没有左括号,栈为空,返回falseif(StackEmpty(&st)){StackDestroy(&st);return false;}STDataType top = StackTop(&st);StackPop(&st);if(*s == ')' && top != '('|| *s == ']' && top != '['|| *s == '}' && top != '{'){StackDestroy(&st);return false;}else{s++;}}}

(2)返回值处理

在这里插入图片描述

如果 栈 不是空,则说明栈中还有左括号未出。即没有匹配,返回是 false

代码如下(示例):

bool ret = StackEmpty(&st);StackDestroy(&st);return ret;

(3)销毁栈

最后不要忘了用 栈 的 StackDestroy 对栈进行销毁否则会导致 内存泄漏等问题

StackDestroy(&st);

四、整体源代码

代码如下(示例):

typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->top = ps->capacity = 0;
}
void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->top = 0;
}
void StackPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, newCapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}
void StackPop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));--ps->top;
}
STDataType StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}
int StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
bool isValid(char * s)
{ST st;StackInit(&st);while(*s){if(*s == '('|| *s == '['|| *s == '{'){StackPush(&st , *s);s++;}else{//如果没有左括号,栈为空,返回falseif(StackEmpty(&st)){StackDestroy(&st);return false;}STDataType top = StackTop(&st);StackPop(&st);if(*s == ')' && top != '('|| *s == ']' && top != '['|| *s == '}' && top != '{'){StackDestroy(&st);return false;}else{s++;}}}bool ret = StackEmpty(&st);StackDestroy(&st);return ret;}

在这里插入图片描述


总结

以上就是今天要讲的内容,本文介绍了【Leedcode】中栈和队列必备的面试题(第一期)
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
在这里插入图片描述

相关文章:

【Leedcode】栈和队列必备的面试题(第一期)

栈和队列必备的面试题(第一期) 文章目录栈和队列必备的面试题(第一期)一、题目二、思路(图解)三、存在的问题与隐患(报错提示)(1)s中只有右括号,无…...

Unity 渲染流程管线

渲染流程图可以把它理解为一个流程,就是我们告诉GPU一堆数据,最后得出来一副二维图像,而这些数据就包括了”视点、三维物体、光源、照明模型、纹理”等元素。参考如下图(来自视频)CPU应用阶段剔除视锥剔除由Unity依据Camera直接完成&#xff…...

c++之引用

目录 引用的概念 引用做函数参数 引用的本质 常引用 引用的概念 在c中新增加了引用的概念,引用可以看作一个已定义变量的别名。 引用的语法:Type &name var; int main() {int a 10;int &b a;printf("b%d\n", b);printf(&quo…...

Java-扑克牌的创建以及发放

Java-扑克牌的创建以及发放题目:创建一个扑克牌(不需要包含大小王),分别分发给3个人,一个人发5张牌,输出结果要求包含全套牌(52张牌),以及3个人各自的牌的花色以及数字。1.扑克牌的源代码2.扑克牌运行结果3.扑克牌代码…...

华为OD机试题,用 Java 解【开放日活动】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…...

yarn run serve报错Error: Cannot find module ‘@vue/cli-plugin-babel‘ 的解决办法

问题概述 关于这个问题,是在构建前端工程的时候遇到的,项目构建完成后,“yarn run serve”启动项目时,出现的问题:“ Error: Cannot find module ‘vue/cli-plugin-babel‘ ” 如下图: 具体信息如下&…...

【LeetCode】剑指 Offer(11)

目录 题目:剑指 Offer 29. 顺时针打印矩阵 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 29. 顺时针…...

【英语】托福单词 近义/形近 分类汇总(更新中......)

transition 转变 过渡; transmit 传送(信息、信号) 传播(疾病) 传达(思想) transaction 交易 transact 做业务 做交易 translucent 半透明的 transparent 透明的 vague 模糊的 含糊的 笼统的 op…...

面试了一个32岁的程序员,一个细节就看出来是培训班的····

首先,我说一句:培训出来的,优秀学员大有人在,我不希望因为带着培训的标签而无法达到用人单位和候选人的双向匹配,是非常遗憾的事情。 最近,在网上看到这样一个留言,引发了程序员这个圈子不少的…...

Qt软件开发: 编写MQTT客户端连接各大物联网平台(主题订阅、发布)

一、前言 最近几年物联网发展的比较迅速,国内各大厂商都推出物联网服务器,面向设备厂商、个人开发者、提供云端一体的设备智能化服务,利用现成的物联网服务器可以快速实现IoT设备智能化的需求。方便企业、个人接入设备,低成本完成物联网开发。 比如:阿里云、百度云、华为…...

PTA L1-059 敲笨钟(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读 题目: 微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改…...

【设计模式】9.桥接模式

概述 现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系: 我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。 试…...

五、线程池

文章目录什么是线程池JDK自带的构建线程池的方式newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduleThreadPoolnewWorkStealingPoolThreadPoolExecutor应用&源码剖析为什么要自定义线程池ThreadPoolExecutor应用ThreadPoolExecutor源码剖析ThreadPo…...

ROS从入门到精通2-6:Rviz可视化进阶(画坐标轴、直线、平面、圆柱等)

目录0 专栏介绍1 Rviz可视化2 环境配置3 使用方法4 测试用例0 专栏介绍 本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用ROS进行实际项目的开发和调试的工程能力。 🚀详情:《ROS从入门到精通》…...

Linux命令之lz4命令

一、lz4命令简介 LZ4是一种压缩格式,特点是压缩/解压缩速度超快(压缩率不如gzip),如果你特别在意压缩速度,或者当前环境的CPU资源紧缺,可以考虑这种格式。lz4是一种非常快速的无损压缩算法,基于字节对齐LZ77系列压缩方…...

强强角逐,筑梦开源| 2022年度启智社区优秀项目及开发者评选结果正式揭晓

2月24日,第四届OpenI/O启智开发者大会在深圳隆重开幕。本届大会以“算网筑基、开源启智、AI赋能”为主题,邀请国内人工智能开源领域领军院士亲自参加,汇聚学术界、产业界的技术专家,围绕中国算力网资源基座、开源社区服务支撑环境…...

【使用两个队列实现栈】

文章目录前言使用两个队列实现栈1.队列接口函数引入2.栈的初始化3.向栈中插入元素4.出栈操作5.取出栈顶元素6.判断栈是否为空7.释放内存空间总结前言 本文章主要介绍栈和队列的相互转换。 使用两个队列实现栈 我们知道,栈的特点是后进先出,而队列的特点…...

毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信

基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STC89C52单片机核心系统电路设计2.2 dht11温湿度检测电路设计2.3 NRF24L01无线通信电路设计3、部分代码展示3.1 NRF24L01初始化3.2 NRF24L01的SPI写时序3.…...

PowerShell Install Rabbitmq

Rabbitmq 前言 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代…...

ASM 字节码插桩:隐私合规方法检测!

1.前言近两年来工信部对于应用的隐私合规安全问题愈加重视,对 Android 平台的管控程度也要比 IOS 平台严格很多,很多不合规的应用也先后被下架要求整改。笔者就曾遇到过加班整改隐私合规的问题,隐私合规问题主要针对两个方面。在用户同意隐私…...

告别DWA!用TEB局部规划器让你的ROS机器人学会‘倒车入库’(附多机编队避障实测对比)

告别DWA!用TEB局部规划器解锁机器人高阶机动能力 在机器人自主导航领域,传统动态窗口方法(DWA)长期占据主导地位,直到开发者们遇到那些需要倒车、急转弯或狭窄空间多机协作的真实场景。想象一下仓储机器人需要在货架间完成"倒车入库&quo…...

避坑指南:为什么你的Jetson开发板apt安装Perf总是失败?

深度解析:Jetson开发板为何无法直接安装Perf及高效解决方案 在嵌入式开发领域,Nvidia Jetson系列凭借其强大的AI计算能力成为边缘计算的热门选择。然而当开发者尝试在这类设备上使用标准Ubuntu方法安装性能分析工具Perf时,往往会遭遇意想不到…...

DIFY vs LangChain:零代码与全代码AI开发框架实战对比(附真实案例)

DIFY vs LangChain:零代码与全代码AI开发框架实战对比(附真实案例) 当企业或开发者希望将大语言模型(LLM)能力整合到业务中时,选择适合的开发框架至关重要。DIFY和LangChain代表了两种截然不同的技术路线&a…...

告别手动更新!GAMIT/GLOBK数据处理中tables表文件的自动化管理与避坑指南

告别手动更新!GAMIT/GLOBK数据处理中tables表文件的自动化管理与避坑指南 在GNSS数据处理领域,GAMIT/GLOBK作为科研和工程项目的核心工具链,其精度和可靠性高度依赖于各类表文件的及时更新。然而,许多中高级用户在实际操作中常陷…...

GitHub Trending 每日精选 - 2026-03-27

GitHub Trending 每日精选 - 2026-03-27 📈 今日概览 今天是 2026-03-27,GitHub Trending 榜单上有哪些值得关注的开源项目?注:此博客为自动化生成,系统会在每日运行时获取最新 Trending 数据并填充具体项目信息。&…...

颈腰椎病引发 “耳后疼痛”:耳根刺痛,可能是颈椎在 “捣乱”

很多人出现耳后持续性刺痛或按压痛,会误以为是中耳炎、腮腺炎,实则部分耳后疼痛与颈椎病变相关。颈椎病变压迫枕大神经(从颈椎延伸至耳后),会导致神经分布区域疼痛;同时颈椎肌肉痉挛、僵硬,牵拉…...

ARM Neon加速NTT实战:如何在Cortex-A72上优化Kyber和Saber的加密性能

ARM Neon加速NTT实战:Cortex-A72上的Kyber与Saber性能优化 在移动安全领域,后量子密码算法的硬件加速已成为行业焦点。Cortex-A72作为ARM中端处理器的代表,其Neon指令集为NTT(数论变换)提供了显著的并行计算能力。本文…...

终极桌面歌词解决方案:LyricsX 让你的音乐体验全面升级

终极桌面歌词解决方案:LyricsX 让你的音乐体验全面升级 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 在macOS平台上享受音乐时,你是否曾渴望拥有…...

从零部署RK3588 MPP:硬编解码环境搭建与核心工具解析

1. RK3588 MPP硬编解码环境搭建全流程 第一次在ArmSoM-W3开发板上折腾RK3588的MPP硬编解码环境时,我踩了不少坑。这里把完整搭建过程拆解成可复现的步骤,用最直白的语言分享给各位开发者朋友。 MPP(Media Process Platform)是瑞芯…...

为什么92%的候选人栽在FastAPI流式响应题上?——基于137份大厂AI后端面试记录的深度复盘

第一章:FastAPI 2.0流式响应的核心机制与演进脉络FastAPI 2.0 对流式响应(Streaming Response)进行了底层重构,将原先依赖 Starlette 的 StreamingResponse 封装升级为原生异步生成器驱动模型,并深度整合 ASGI 3.0 规范…...