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

news2024/9/21 18:40:55

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


文章目录

  • 栈和队列必备的面试题(第一期)
  • 一、题目
  • 二、思路(图解)
  • 三、存在的问题与隐患(报错提示)
    • (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
        {
            //如果没有左括号,栈为空,返回false
            if(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
        {
            //如果没有左括号,栈为空,返回false
            if(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】中栈和队列必备的面试题(第一期)
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/377758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Capture Modules:车载网络报文捕获模块

(以下所有图片均来源于Technica官网) Technica Engineering的新一代硬件设备,即Capture Modules,提供了五种变体以涵盖不同带宽的车载以太网(100BASE-T1和1000BASE-T1)以及常见的IVN技术(CAN、C…

云原生架构基础概念及应用办法

什么是云原生? 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展,适用于各种不同的云平台。 如果要更直接通俗的来解释下上面的概念。 云原生更准确来说就是一种文化,是一种潮流&a…

modbus转profinet网关连接UV系列流量计程序实例

用户现场是西门子1200PLC通过兴达易控Modbus转Profinet网关连接流量计的配置,对流量瞬时值及报警值监控及控制程序案例 硬件连接兴达易控网关采用Profinet双网口,一端连接PLC、一端连接编程软件,单路485接口连接流量计,对流量值实…

mac使用sublime text卡顿解决方法,附常用快捷键

在mac上使用sublime text总是卡顿,比如选中一段文字复制,然后去干别的,等会回来点击空白处取消对文字的选择,点好多下都取消不了。 再比如修改tab格式也是改着改着就卡住了。 解决方法也很简单,打开sublime text的配置…

MIT:只需一层RF传感器,就能为AR头显赋予“X光”穿透视力

近年来,AR在仓库、工厂等场景得到应用,比如GlobalFoundries、亚马逊、菜鸟裹裹就使用摄像头扫描定位货品,并使用AR来导航和标记。目前,这种方案主要基于视觉算法,因此仅能定位视线范围内的目标。然而,在一些…

python基础—字符串操作

(1)字符串: Python内置了一系列的数据类型,其中最主要的内置类型是数值类型、文本序列(字符串)类型、序列(列表、元组和range)类型、集合类型、映射(字典)类型…

论文阅读 | Cross-Attention Transformer for Video Interpolation

前言:ACCV2022wrokshop用transformer做插帧的文章,q,kv,来自不同的图像 代码:【here】 Cross-Attention Transformer for Video Interpolation 引言 传统的插帧方法多用光流,但是光流的局限性在于 第一&…

Android Qcom Audio架构学习

总结: Android Audio不简单呀,一个人摸索入门不容易的,研究了一段时间,感觉还不是很懂,但以下的知识对入门还是有帮助的。 Audio架构中的名词 FE(Front End) 提供pcm的设备信息,将数据从用户空间传输到音…

【大数据离线开发】8.2 Hive的安装和配置

8.3 Hive的安装和配置 安装模式: 嵌入模式 :不需要使用MySQL,需要Hive自带的一个关系型数据库:Derby本地模式、远程模式 ----> 需要MySQL数据库的支持 安装 hive 安装包 1、解压tar -zxvf apache-hive-2.3.0-bin.tar.gz -C…

美格智能发布高性价比5G CPE解决方案SRT838I,赋能5G FWA行业数字化转型

2月27日,在MWC 2023世界移动通信大会上,美格智能重磅发布高性价比5G CPE解决方案SRT838I,该方案搭载高通骁龙X62调制解调器及射频系统WCN6856高速5G解决方案设计,其具有广覆盖、强信号、高速率等特点,非常符合5G CPE的…

.NET 导入导出Project(mpp)以及发布后遇到的Com组件问题

最近公司项目有一个对Project导入导出的操作,现在市面上能同时对Project进行导入导出的除了微软自带的Microsoft.Office.Interop.MSProject,还有就是Aspose.Tasks for .NET。但因为后者是收费软件且破解版的现阶段只到18.11,只支持.net Frame…

【博学谷学习记录】超强总结,用心分享丨人工智能 多场景实战 常用英文缩写概念总结

目录PV(Page View)UV(Unique Visitor)CPM(Cost Per Mille)CPC(Cost Per Click)CPA(Cost Per Action)CPI(Cost Per Install)ACU(Average concurrent users)PCU(Peak concurrent users)ARPU(Average Revenue Per User)ARPPU(Average Revenue Per Paying User)LTV(Life Time Value…

Windows系统部署瀚高数据库并在SuperMap iDesktop中使用

目录前言一:Windows系统部署瀚高数据库二:对数据库进行PostGIS扩展三:SuperMap iDesktop中新建HighGoDB数据库型数据源作者:kxj 前言 瀚高数据库是一款对象-关系型数据库,拥有非常丰富的数据库基本功能,涵盖…

【数据结构与算法】图 ( 图的存储形式 | 图的基本概念 | 图的表示方式 | 邻接矩阵 | 邻接表 | 图的创建 | 代码示例 )

文章目录一、图的存储形式二、图的基本概念三、图的表示方式1、邻接矩阵2、邻接表四、图的创建 ( 代码示例 )一、图的存储形式 线性表 中的元素 , 有 一个 直接前驱 和 一个 直接后继 ; 树 中的元素 , 有 一个 直接前驱 和 多个 直接后继 ; 图 中的元素 , 有 多个 直接前驱 和…

常见的视频文件格式有哪些?

常见的视频文件格式有哪些?常见在线流媒体格式:mp4、flv、f4v、webm移动设备格式:m4v、mov、3gp、3g2RealPlayer :rm、rmvb微软格式 :wmv、avi、asfMPEG 视频 :mpg、mpeg、mpe、tsDV格式 :div、…

【学习笔记】构建小型金融知识图谱(github项目)

前言 需要构建农业知识图谱,先来学习一下构建知识图谱的基本流程和套路,熟悉过程方便 科研 后续工作的开展,写下此篇博客作为我的笔记吧~ 参考代码来源:github项目 jm199504/Financial-Knowledge-Graphs 1.知识图谱存储方式 知…

intel的集成显卡(intel(r) uhd graphics) 配置stable diffusion

由于很多商务本没有独立显卡,只有Intel的集成显卡,在配置安装stable diffusion 时候需要特殊对待,参考不少帖子,各取部分现稍加整合。整体思路分两个部分:第一步是先配置环境,主要是安装Anaconda Pytorch&…

Biotin-PEG-SVA,生物素聚乙二醇琥珀酰亚胺戊酸酯,可用于检测或分子标记

Biotin-PEG-SVA 结构式:PEG分子量: 1000,2000,3400,5000,10000中文名称:生物素聚乙二醇琥珀酰亚胺戊酸酯,生物素-PEG-琥珀酰亚胺戊酸酯英文名称:Biotin-PEG-SVA &#xf…

自动化测试项目实战 ——12306火车票网站自动登录工具

还记得前几年春运,12306火车票预订网站经常崩溃无法登录吗。 今天我们就开发一个12306网站自动登录软件。 帮助您轻松订票 通过前两篇博客Fiddler教程和HTTP协议详解,我们了解了Web的原理. Web的原理就是,浏览器发送一个Request给Web服务器…

torchserve安装、模型的部署与测试(基于docker)

问题描述 pytorch 一直很受大家的欢迎,但是作为一个深度模型,与外界复杂的业务需求交互其实是一件比较麻烦的事情,这里 torchserve 提供一个基于 TCP 的交互方法,算法模型部署后,用户可以通过提交 post 请求&#xff…