【每日刷题】Day33

【每日刷题】Day33

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 20. 有效的括号 - 力扣(LeetCode)

2. 445. 两数相加 II - 力扣(LeetCode)

3. 1021. 删除最外层的括号 - 力扣(LeetCode)

1. 20. 有效的括号 - 力扣(LeetCode)

//思路:栈的基本使用。

typedef char STDataType;

typedef struct Stack

{

    STDataType* arr;

    int top;

    int capacity;

}ST;


//初始化栈

void StackInit(ST* st)

{

    st->arr = NULL;

    st->top = 0;

    st->capacity = 0;

}

//入栈

void StackPush(ST* st,STDataType s)

{

    assert(st);

    if(st->top==st->capacity)

    {

        int newcapacity = st->capacity == 0?4:2*st->capacity;

        STDataType* tmp = (STDataType*)realloc(st->arr,newcapacity*sizeof(STDataType));

        if(tmp==NULL)

        {

            perror("malloc:");

            exit(-1);

        }

        st->capacity = newcapacity;

        st->arr = tmp;

    }

    st->arr[st->top] = s;

    st->top++;

}

//获取栈顶元素

STDataType StackTop(ST* st)

{

    assert(st);

    assert(st->top>0);

    return st->arr[st->top-1];

}

//出栈

void StackPop(ST* st)

{

    assert(st);

    assert(st->top>0);

    st->top--;

}

//判断栈是否为空

bool StackEmpty(ST* st)

{

    assert(st);

    return st->top == 0;

}



 

bool isValid(char* s)

{

    ST st;

    StackInit(&st);//初始化栈

    while(*s)

    {

        if(*s=='{'||*s=='['||*s=='(')//如果遇到左括号,则入栈

        {

            StackPush(&st,*s);

        }

        else//如果遇到右括号,将栈中元素出栈

        {

            if(StackEmpty(&st))//如果前面没有入过栈,则直接返回

            {

                return false;

            }

            STDataType tmp = StackTop(&st);//先取得栈顶元素,判断是否与右括号匹配

            StackPop(&st);//出栈

            if((tmp=='('&&*s!=')')//如果不匹配,直接返回

            ||(tmp=='{'&&*s!='}')

            ||(tmp=='['&&*s!=']'))

            {

                return false;

            }

        }

        s++;

    }

    bool ret = StackEmpty(&st);//判断栈是否为空,为空说明所有左括号均与右括号匹配,为true,否则为false

    return ret;

}

2. 445. 两数相加 II - 力扣(LeetCode)

//思路:栈和链表的基本使用。

typedef struct ListNode LN;


 

int max(int x,int y)

{

    return x>y?x:y;

}

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)

{

    LN* newhead = NULL;

    int i = 0;

    int j = 0;

    int arr1[100] = {0};

    int arr2[100] = {0};

    LN* pmove1 = l1;

    LN* pmove2 = l2;

    int flag = 0;

    while(pmove1)//链表1入栈

    {

        arr1[i++] = pmove1->val;

        pmove1 = pmove1->next;

    }

    while(pmove2)//链表2入栈

    {

        arr2[j++] = pmove2->val;

        pmove2 = pmove2->next;

    }

    i--;//定位栈顶元素

    j--;

    while(i>=0||j>=0)//两个栈同时出栈,元素相加,判断是否需要进位

    {

        LN* newnode = (LN*)malloc(sizeof(LN));//新节点,以头插的方式插入新链表

        newnode->next = newhead;

        newhead = newnode;

        int x = i>=0?arr1[i]:0;//栈1元素

        int y = j>=0?arr2[j]:0;//栈2元素

        int tmp = (x+y+flag)%10;

        newnode->val = tmp;

        if(x+y+flag>=10)//判断是否进位

        {

            flag = 1;

        }

        else

        {

            flag = 0;

        }

        if(i>=0)//防止栈越界访问

        {

            i--;

        }

        if(j>=0)

        {

            j--;

        }

    }

    if(flag)//如果出了循环,flag还为1,则说明最高位进了1,创建新节点,节点val为1,头插进链表中

    {

        LN* newnode = (LN*)malloc(sizeof(LN));

        newnode->next = newhead;

        newnode->val = 1;

        newhead = newnode;

    }

    return newhead;

}

3. 1021. 删除最外层的括号 - 力扣(LeetCode)

//0ms  100%思路:与第一题类似,栈的基础使用。

typedef int STDataType;

//栈结构体

typedef struct Stack

{

    STDataType* arr;

    int top;

    int capacity;

}ST;



 

//初始化栈

void StackInit(ST* st)

{

    assert(st);

    st->arr = NULL;

    st->capacity = st->top = 0;

}


 

//释放栈

void StackRelease(ST* st)

{

    assert(st);

    free(st->arr);

    st->arr = NULL;

    st->capacity = st->top = 0;

}


 

//判空

bool StackEmpty(ST* st)

{

    assert(st);

    return st->top == 0;

}



 

//入栈

void StackPush(ST* st, STDataType x)

{

    assert(st);

    if (st->top == st->capacity)

    {

        int newcapacity = st->capacity == 0 ? 4 : 2 * st->capacity;

        STDataType* tmp = (STDataType*)realloc(st->arr,sizeof(STDataType) * newcapacity);

        if (tmp == NULL)

        {

            perror("malloc:");

            exit(-1);

        }

        st->arr = tmp;

        st->capacity = newcapacity;

    }

    st->arr[st->top] = x;

    st->top++;

}


 

//出栈

void StackPop(ST* st)

{

    assert(st);

    assert(st->top > 0);

    st->top--;

}



 

//获取栈顶元素

STDataType StackTop(ST* st)

{

    assert(st);

    assert(st->top > 0);

    return st->arr[st->top - 1];

}


 

char* removeOuterParentheses(char* s)

{

    ST st;

    StackInit(&st);//初始化栈

    char* arr = (char*)malloc(sizeof(char)*100000);//新空间存储删除后的字符串

    int count = 0;

    while(*s)

    {

        if(*s=='(')//如果为左括号入栈

        {

            StackPush(&st,*s);

        }

        if(st.top>1)//如果栈中元素大于1,说明当前*s不是要删除的括号,直接放入创建好的空间中

        {

            arr[count++] = *s;

        }

        if(*s==')')//如果是右括号,与栈中左括号匹配,出栈

        {

            StackPop(&st);

        }

        s++;

    }

    arr[count] = '\0';

    return arr;

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytest教程-38-钩子函数-pytest_runtest_protocol

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_collection_finish钩子函数的使用方法,本小节我们讲解一下pytest_runtest_protocol钩子函数的使用方法。 pytest_runtest_protocol 钩子函数在 pytest 运行单个测试用例之前…

uniapp picker组件的样式更改

不知道有没有小伙伴遇到过这个问题 我是各种穿透和层级都尝试了更改不了其样式 梳理一下 H5端 在全局app.vue下添加如下代码 .uni-picker-container .uni-picker-header{ background-color: $uni-color-pink; //picker头部背景色}.uni-picker-container .…

【busybox记录】【shell指令】uniq

目录 内容来源: 【GUN】【uniq】指令介绍 【busybox】【uniq】指令介绍 【linux】【uniq】指令介绍 使用示例: 去除重复行 - 默认输出 去除重复行 - 跳过第n段(空格隔开),比较n1以后的内容,去重 去…

数组折半法查找数据(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> //定义数据&#xff1b; #define N 15int main() {//初始化变量值&#xff1b;int a[N], i, top, bott, loca, flag 1, sign, numb…

使用macof发起MAC地址泛洪攻击

使用macof发起MAC地址泛洪攻击 MAC地址泛洪攻击原理&#xff1a; MAC地址泛洪攻击是一种针对交换机的攻击方式&#xff0c;目的是监听同一局域网中用户的通信数据。交换机的工作核心&#xff1a;端口- MAC地址映射表。这张表记录了交换机每个端口和与之相连的主机MAC地址之间…

Map集合的实现类~HashMap

存储结构&#xff1a;哈希表 键重复依据是hashCode和equals方法&#xff08;键不能重复&#xff09; 添加&#xff1a; 先创建Student类&#xff0c;那么往HashSet添加的就是Student对象作为键值&#xff0c;后面的作为值 删除&#xff1a; 判断&#xff1a; 遍历&#xff1a…

Parts2Whole革新:多参照图定制人像,创新自定义肖像生成框架!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; Parts2Whole革新&#xff1a;多参照图定制人像&#xff0c;创新自定义肖像生成框架&#xff01; 引言&#xff1a;探索多条件人像生成的新篇章 在数字内容创作…

【MATLAB源码-第204期】基于matlab的语音降噪算法对比仿真,谱减法、维纳滤波法、自适应滤波法;参数可调。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 语音降噪技术的目的是改善语音信号的质量&#xff0c;通过减少或消除背景噪声&#xff0c;使得语音更清晰&#xff0c;便于听者理解或进一步的语音处理任务&#xff0c;如语音识别和语音通讯。在许多实际应用中&#xff0c;如…

深度学习之基于YOLOv5智慧交通拥挤预警检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着城市化进程的加速和人口规模的不断增长&#xff0c;交通拥挤问题日益严重。传统的交通拥挤预警方…

C++笔记-makefile添加第三方.h和.cpp及添加.h和lib库模板

目文件结构如下所示时&#xff1a; project/├── main.cpp├── test.cpp├── DIRA/│ ├── A.cpp│ └── A.h├── DIRBLIB/│ └── libB.so└── include/└── B.h Makefile如下所示&#xff1a; # 编译器设置 CXX g CXXFLAGS -stdc11 -Wall# 目录…

互联网十万个为什么之什么是云计算

云计算是一种通过互联网提供计算资源和服务的技术。它允许用户随时随地访问和使用云平台上的数据、软件和硬件资源。在数字化时代&#xff0c;互联网已经成为基础设施。云计算使得数据中心能够像一台计算机一样去工作。通过互联网将算力以按需使用、按量付费的形式提供给用户&a…

2024年Q1脱毛膏线上市场(京东天猫淘宝)销量销额排行榜

鲸参谋监测的2024年Q1季度线上电商平台&#xff08;天猫淘宝京东&#xff09;脱毛膏行业销售数据已出炉&#xff01; 根据鲸参谋数据显示&#xff0c;今年Q1季度在线上电商平台&#xff08;天猫淘宝京东&#xff09;&#xff0c;脱毛膏的销量累计接近220万件&#xff0c;环比增…

基于51单片机的ADC0804的电压表设计(仿真+源码+设计资料)

目录 1、前言 2、资料内容 3、仿真图 4、程序 资料下载地址&#xff1a;基于51单片机的ADC0804的电压表设计&#xff08;仿真源码设计资料&#xff09; 1、前言 最近看网上有很少的ADC0804的设计了&#xff0c;都由0809代替&#xff0c;但是有个别因为成本原因和学校课…

使用Express+Node.js搭建网站

Express是一个基于Node.js平台的快速、开放、极简的Web开发框架。它的作用是专门用来创建Web服务器&#xff0c;与Node.js内置的http模块功能相似&#xff0c;但更为简便和高效。 Express中文官网&#xff1a;Express - 基于 Node.js 平台的 web 应用开发框架 - Express中文文…

25考研英语长难句Day02

25考研英语长难句Day02 【a.词组】【b.断句】 如果你是你讲话对象中的一员&#xff0c;你就能了解你们大家共同的经历和问题&#xff0c;你也可以顺便评论一下食堂里难吃的食物或董事长臭名昭著的领带品味。 【a.词组】 单词解释addressv. 演说&#xff0c; 演讲&#xff1b;…

一堆自定义C#代码片段,让你开发效率飞涨

SharpBoxes 是一款用于 Visual Studio 的扩展&#xff0c;作者为本人&#xff1b; 该扩展旨在提高开发效率。它为开发人员提供了一组日常使用频率较高的代码片段&#xff0c;让你在编写代码时能够更快地插入常用的代码段。通过安装这个扩展&#xff0c;你可以使用快捷键轻松插…

Django 4.x 智能分页get_elided_page_range

Django智能分页 分页效果 第1页的效果 第10页的效果 带输入框的效果 主要函数 # 参数解释 # number: 当前页码&#xff0c;默认&#xff1a;1 # on_each_side&#xff1a;当前页码前后显示几页&#xff0c;默认&#xff1a;3 # on_ends&#xff1a;首尾固定显示几页&#…

【在线OJ】Vue创建OJ管理系统

一、创建项目 vue ui命令创建项目 项目创建完成后来到项目 二、导航栏 首先创建一个根页面&#xff0c;让他展示在页面上 创建之后来到路由配置界面 然后安装ElementUI&#xff0c;来到官网找到导航栏 复制代码后粘贴到刚才创建的vue文件里&#xff0c;启动项目&#xff…

力扣:62. 不同路径

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&…

SolidWorks进行热力学有限元分析二、模型装配

1.先打开软件&#xff0c;新建装配体 2.选中你要装配的零件&#xff0c;直接导入就行 3.鼠标点击左键直接先放进去 4.开始装配&#xff0c;点配合 5.选择你要接触的两个面&#xff0c;鼠标右键确定&#xff0c;然后把剩下的面对齐一下就行了 6.搞定