OJ题目【栈和队列】
目录
有效的括号
有效的括号【代码】
用队列实现栈
用队列实现栈【代码】
用栈实现队列
用栈实现队列【代码】
设计循环队列
有效的括号
https://leetcode.cn/problems/valid-parentheses/submissions/551394950/
思路:把左括号放到栈里,取出来栈顶和右括号匹配,匹配上了就出栈,然后在取出栈顶和下一个右括号匹配,一直匹配下去,
创建一个栈用来存放左括号,然后把字符串的首地址s给ps,让ps遍历到\0。
来看看循环里面,
第一步:判断把左括号全部放进栈里。
第二步:判断栈里是不是空,是空就没必要匹配了,没有左括号,直接返回false。
第三步:走到第三步,说明左括号全部放进栈里了,然后取出栈顶给ch,
然后左括号和右括号进行匹配,匹配成功就出栈,匹配不成功就销毁,然后返回false。
解决只有一个左括号的情况。
布尔判断栈里是不是空,是空把true给tab,不是空返回false给tab。
销毁空间后,返回tab。
有效的括号【代码】
typedef char data;
typedef struct stack
{data* arr;int koj;//空间大小int top;//栈顶
}SL;//初始化
void csh(SL* r)
{r->arr = NULL;r->koj = r->top = 0;
}//入栈
void push(SL* r, data x)
{//判断空间够不够if (r->koj == r->top){int koj1 = r->koj == 0 ? 4 : 2 * r->koj;SL* tab = (SL*)realloc(r->arr, koj1 * sizeof(SL));if (tab == NULL){perror("realloc");exit(1);}r->arr = tab;r->koj = koj1;}r->arr[r->top] = x;r->top++;
}bool buer(SL* r)
{assert(r);return r->top == 0;
}//出栈
void pop(SL* r)
{assert(r);assert(!buer(r));--r->top;
}
//取栈顶
data qzd(SL* r)
{assert(r);assert(!buer(r));return r->arr[r->top-1];
}
//取有效个数
data size(SL* r)
{assert(r);return r->top;
}//销毁
void xiaoh(SL* r)
{assert(r);if (r->arr != NULL){free(r->arr);}r->arr = NULL;r->koj = r->top = 0;
}
//上面是栈需要的函数//下面是实现代码
bool isValid(char* s) {//创建一个栈SL add;//把s给pschar*ps=s;//循环让ps往后走while(*ps!='\0'){//判断把左括号放进栈里if(*ps=='(' || *ps=='[' || *ps=='{'){push(&add,*ps);}else{//判断栈顶是不是空,是空返回false。if(buer(&add)){return false;}//取出左括号放进ch来char ch = qzd(&add);//判断左括号和右括号匹不匹配if((*ps==')'&&ch=='(')||( *ps==']'&&ch=='[')|| (*ps=='}'&& ch=='{')){//匹配出栈pop(&add);}else{//不匹配直接销毁返回falsexiaoh(&add);return false;}}ps++;}//布尔判断栈里是不是为空,是空把true赋值给tab。char tab = buer(&add) == true;xiaoh(&add);return tab;
}
用队列实现栈
https://leetcode.cn/problems/implement-stack-using-queues/description/
实现前先导入队列的函数
思路:创建2个队列
入栈不为空的队列Q1。
出栈的话把Q1的size-1的数据1和2插入Q2的队列,我们就可以把3出栈了。
https://leetcode.cn/problems/implement-stack-using-queues/
第一步:先创建2个队列来实现栈。
第二步:创建ps指向栈,然后初始化这2个队列。
入栈,为不为空的队列,入数据到队列。
if用布尔判断Q1队列是不是空,是空往Q2队列入数据,调用入队列函数。
第一步:把Q1给空队列,把Q2给不为空的队列。
第二步:判断Q1如果不为空,2个交换,把Q1给buko,把Q2给ko。
第三步:循环把有效个数-1的数据,给到为空的队列。
取出队头数据给tab,然后入队到空队列,再把不为空的队列出队。
第四步:把队列的最后一个数据,保存到pop,然后出队列,返回pop。
布尔判断,找不为空的队列,取出队尾数据,返回队尾。
布尔判断2个队列是不是空,2个都为真返回true,有1个或2个为假,返回false。
销毁直接调用销毁队列的函数就行了,然后把obj销毁,把obj置为NULL。
用队列实现栈【代码】
typedef int data;
typedef struct queuedata//单链表
{data arr;//存放的数据struct queuedata* p;//指向下一个节点
}queuedata;typedef struct Queue
{queuedata* to; //队头——单链表的 头节点queuedata* wei;//队尾——单链表的 尾节点int size; //有效个数
}Queue;//初始化
void csh(Queue* r)
{assert(r);r->to = r->wei = NULL;r->size = 0;
}//入队尾
void dui_wei(Queue* r,data x)
{assert(r);//申请单链表空间queuedata* tab = (queuedata*)malloc(sizeof(queuedata));if (tab == NULL){perror("malloc");exit(1);}//把x赋值给新申请空间的arrtab->arr = x;tab->p = NULL;//入队//判断队尾是不是空if (r->wei == NULL){//是空,队头队尾指向新申请的空间r->to = r->wei = tab;}else//不是空{//队尾p指向新申请的空间r->wei->p = tab;//队尾走到新申请的空间r->wei = r->wei->p;}//有效个数加1r->size++;
}
//布尔类型
bool buer(Queue* r)
{assert(r);return r->to == NULL;
}//出队,头
void dui_to(Queue* r)
{assert(r);//布尔类型,!把真变假,把假变真assert(!buer(r));//判断队头等于队尾,就说明只有一个节点if (r->to == r->wei){//直接释放空间free(r->to);//把队头和队尾置为空r->to = r->wei = NULL;}else{//把队头的下一个节点给tabqueuedata* tab = r->to->p;//释放当前队头节点free(r->to);//把tab节点给队头r->to = tab;}//有效个数减1--r->size;
}//取队头数据
data qto(Queue* r)
{assert(r);assert(!buer(r));return r->to->arr;
}//取尾
data qwei(Queue* r)
{assert(r);assert(!buer(r));return r->wei->arr;
}//有效个数
data size(Queue* r)
{assert(r);return r->size;
}//销毁
void xiaoh(Queue* r)
{assert(r);//assert(!buer(r));//把队头给tabqueuedata* tab = r->to;//循环销毁单链表while (tab != NULL){//add保存头节点的下一个节点queuedata* add = tab->p;//释放头节点free(tab);//把add给tabtab = add;}//把队头和队尾置为空r->to = r->wei = NULL;//有效个数赋值为0r->size = 0;
}
//上面是队列的函数///下面是实现代码
typedef struct {//创建2个队列来实现栈Queue Q1;Queue Q2;} MyStack;//栈初始化
MyStack* myStackCreate()
{//创建ps指向栈MyStack*ps=(MyStack*)malloc(sizeof(MyStack));//初始化这2个队列csh(&ps->Q1);csh(&ps->Q2);return ps;
}//入栈
void myStackPush(MyStack* obj, int x) {//往不为空的队列插入数据if(!buer(&obj->Q1)){dui_wei(&obj->Q1, x);}else{dui_wei(&obj->Q2, x);}
}//出栈
int myStackPop(MyStack* obj) {//空Queue* ko = &obj->Q1;//不为空Queue* buko = &obj->Q2;//找不为空的队列if(!buer(&obj->Q1)){buko = &obj -> Q1;ko = &obj -> Q2;}//把有数据的队列中size-1个数据导入到空队列中while(size(buko) > 1){//取队头给tabint tab = qto(buko);//把tab的数据给 ko空队列dui_wei(ko , tab);//出队,头dui_to(buko);}//不为空的队列还剩下一个数据,给popint pop = qto(buko);//最后一个数据出栈dui_to(buko);//返回popreturn pop;
}//取栈顶元素
int myStackTop(MyStack* obj) {//找不为空的队列,取出队尾数据if(!buer(&obj->Q1)){return qwei(&obj->Q1);}else{return qwei(&obj->Q2);}
}bool myStackEmpty(MyStack* obj) {//用布尔判断2个队列是不是空return buer(&obj->Q1) && buer(&obj->Q2);
}//销毁
void myStackFree(MyStack* obj) {//直接调用销毁队列的函数就行了xiaoh(&obj->Q1);xiaoh(&obj->Q2);//把我们申请的ps销毁,obj就是ps,返回了ps然后obj接收。free(obj);//置为空obj=NULL;
}/*** Your MyStack struct will be instantiated and called as such:* MyStack* obj = myStackCreate();* myStackPush(obj, x);* int param_2 = myStackPop(obj);* int param_3 = myStackTop(obj);* bool param_4 = myStackEmpty(obj);* myStackFree(obj);
*/
用栈实现队列
https://leetcode.cn/problems/implement-queue-using-stacks/description/
实现前先导入栈的函数
思路:用2个栈Q1,Q2,
入队列:往Q1导入数值,
出队列(头):判断Q2是不是空,是就循环取出Q1栈顶,导入到Q2,Q2再出栈,出的就是队头了,对了还要先保存队头,再返回队头的数据。
取队头数据:判断Q2是不是空,不是空就说明数据已经导入到Q2了,直接取栈顶。
myQueueEmpty:判断队列是不是空。
销毁:调用销毁函数,销毁2个栈,再把申请的obj空间释放,然后置为空。
第一步:创建2个栈。
第二步:创建ps空间指向Q1和Q2,
然后初始化这2个栈,返回ps。
直接调用,入栈函数,为Q1导入数据就行了。
判断Q2栈是不是空,是空的话循环把Q1的全部数值,导入到Q2,
取出Q2栈顶给tab,Q2出栈,返回tab。
判断Q2栈是不是空,是空的话循环把Q1的全部数值,导入到Q2
返回Q2栈顶的元素就行了。
判断队列是不是空,是空返回false,不是空返回true。
把Q1和Q2的栈销毁,然后销毁obj,把obj置为空。
用栈实现队列【代码】
typedef int data;
typedef struct stack
{data* arr;//存放数值int koj; //空间int top; //栈顶
}stack;//初始化
void stack_csh(SL* r)
{assert(r);r->arr = NULL;r->koj = r->top = 0;
}//入栈
void stack_push(stack* r, data x)
{assert(r);//空间大小等于栈顶,就说明空间不够if (r->koj == r->top){int koj1 = r->koj == 0 ? 4 : 2 * r->koj;stack* tab = (stack*)realloc(r->arr, sizeof(stack));if (tab == NULL){perror("realloc");exit(1);}//把新申请的空间给rr->arr = tab;r->koj = koj1;}//空间够直接入栈r->arr[r->top] = x;r->top++;
}//布尔类型
bool buer(stack* r)
{assert(r);return r->top == 0;
}//出栈
void stack_pop(stack* r)
{assert(r);//布尔类型assert(!buer(r));r->top--;
}//取出栈顶
data stack_top(stack* r)
{assert(r);assert(!buer(r));return r->arr[r->top - 1];
}//有效个数
data stack_size(stack* r)
{assert(r);return r->top;
}//销毁
void xiaoh(stack* r)
{assert(r);if (r->arr != NULL){free(r->arr);}r->arr = NULL;r->koj = r->top = 0;
}
//上面是栈的函数///下面是实现代码
typedef struct {//创建2个栈stack Q1;stack Q2;
} MyQueue;//初始化
MyQueue* myQueueCreate() {//创建指针指向Q1和Q2MyQueue* ps = (MyQueue*)malloc(sizeof(MyQueue));//初始化2个栈stack_csh(&ps->Q1);stack_csh(&ps->Q2);//返回psreturn ps;
}//入栈(入队列)
void myQueuePush(MyQueue* obj, int x) {//调用入栈函数,为Q1入栈stack_push(&obj->Q1 , x);
}//出栈(出队列,头)
int myQueuePop(MyQueue* obj) {//判断Q2是不是空,不是空说明Q2栈里有数据if( buer(&obj->Q2) ){//是空,循环取出Q1的数值,导入Q2栈里while(!buer(&obj->Q1)){//入栈到Q2 取出Q1栈顶stack_push(&obj->Q2,stack_top(&obj->Q1));//Q1出栈stack_pop(&obj->Q1);}}//取出Q2的栈顶给tab(取队头)int tab = stack_top(&obj->Q2);//Q2出栈stack_pop(&obj->Q2);return tab;
}//取栈顶(队头)
int myQueuePeek(MyQueue* obj) {//判断Q2是不是空,不是空说明Q2栈里有数据if( buer(&obj->Q2) ){//是空,循环取出Q1的数值,导入Q2栈里while(!buer(&obj->Q1)){//入栈到Q2 取出Q1栈顶stack_push(&obj->Q2,stack_top(&obj->Q1));//Q1出栈stack_pop(&obj->Q1);}}//返回Q2的栈顶(返回队头)return stack_top(&obj->Q2);
}bool myQueueEmpty(MyQueue* obj) {//判断这2个栈是不是都为空(判断队列是不是空)return buer(&obj->Q1) && buer(&obj->Q2);
}void myQueueFree(MyQueue* obj) {//销毁xiaoh(&obj->Q1);xiaoh(&obj->Q2);//也把obj销毁free(obj);obj=NULL;
}/*** Your MyQueue struct will be instantiated and called as such:* MyQueue* obj = myQueueCreate();* myQueuePush(obj, x);* int param_2 = myQueuePop(obj);* int param_3 = myQueuePeek(obj);* bool param_4 = myQueueEmpty(obj);* myQueueFree(obj);
*/
设计循环队列
https://leetcode.cn/problems/design-circular-queue/description/
这个队列底层使用数组,比较好实现。
结构体的参数,数组,头,尾,空间大小。
申请ps的一个结构体,
给arr申请一个数值的空间,我们申请的数值空间必须多一块空间,方便5%5等于0。
初始化:把头尾初始化为0,空间大小初始化为k,k就是4。
第一步:先判断队列是不是满了,满了直接返回false,没有满插入数据。
第二步:为arr数组wei下标位置插入数据,然后++,参考【1%5=1, 2%5=2 ,3%5=3, 4%5=4, 5%5=0】。
当wei走到下标为5,5%5=0,所以就会回到0,返回true。
第一步:判断队列是不是空,是空直接返回false。
第二步:头直接++就好了,1%5=1, 2%5=2 ,3%5=3, 4%5=4, 5%5=0
当to走到下标为5,5%5=0,所以就会回到0,返回true。
先判断是不是空,不是空返回头,是空返回-1。
第一步:判断队列是不是空。
第二步:把wei-1的数据赋值tab,为什么是wei-1呢?
上面这一张图,我们可以看到插入数据后就++了,所以我们取队尾,wei-1。
第三步:判断尾下标是不是0,这里是一种特殊情况0-1=-1,-1没有下标,
我们直接把空间大小给tab就是下标为4这个元素了。
返回arr下标为tab的数值。
设计循环队列代码
typedef struct {int *arr;int to;//头int wei;//尾int kojdax;//空间大小
} MyCircularQueue;//初始化
MyCircularQueue* myCircularQueueCreate(int k) {//申请空间MyCircularQueue* ps = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));// 4 * 5 = 20,就是5个空间ps->arr = (int*)malloc(sizeof(int) * (k + 1));//初始化ps->to = ps->wei = 0;ps->kojdax = k;return ps;
}bool myCircularQueueIsFull(MyCircularQueue* obj) {//判断队列是不是满了,等于头就说明满了return (obj->wei+1) % (obj->kojdax+1) == obj->to;
}//入队列
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {//队列满了不能插入数据if(myCircularQueueIsFull(obj)){return false;}//在wei位置插入数据,然后++obj->arr[obj->wei++] = value;//5 % 5 = 0,rear走到5下标的时候回到下标为0的位置。obj->wei %= obj->kojdax + 1;return true;}bool myCircularQueueIsEmpty(MyCircularQueue* obj) {//等于就说明队列是空return obj->to == obj->wei;
}//出队列
bool myCircularQueueDeQueue(MyCircularQueue* obj) {//队列为空if(myCircularQueueIsEmpty(obj)){return false;}//队列不为空//头往后走就行obj->to++;//会越界所以:5 % 5 = 0,to走到5下标的时候回到下标为0的位置。obj->to %= obj->kojdax + 1;return true;
}//取队头
int myCircularQueueFront(MyCircularQueue* obj) {//判断队列是不是空if(myCircularQueueIsEmpty(obj)){return -1;}//返回头return obj->arr[obj->to];}//取队尾
int myCircularQueueRear(MyCircularQueue* obj) {//判断队列是不是空if(myCircularQueueIsEmpty(obj)){return -1;}//把wei-1的数据给tabint tab = obj->wei - 1;//尾等于下标0if(obj->wei == 0){//把有效个数4给tabtab = obj -> kojdax;}//返回tabreturn obj->arr[tab];
}//销毁
void myCircularQueueFree(MyCircularQueue* obj) {free(obj->arr);free(obj);obj=NULL;
}
相关文章:

OJ题目【栈和队列】
目录 有效的括号 有效的括号【代码】 用队列实现栈 用队列实现栈【代码】 用栈实现队列 用栈实现队列【代码】 设计循环队列 有效的括号 https://leetcode.cn/problems/valid-parentheses/submissions/551394950/ 思路:把左括号放到栈里,取出来栈…...
[shell][git]git将当前分支的HEAD指针重置到最后一次提交的状态
在Git中,git reset --hard HEAD 命令用于将当前分支的HEAD指针重置到最后一次提交的状态,并且会丢弃当前工作目录中的所有更改。这个命令的意思是: git reset:重置命令,用于将HEAD指针移动到指定的状态。--hard&#…...
高翔【自动驾驶与机器人中的SLAM技术】学习笔记(六)卡尔曼滤波器二:图解卡尔曼滤波器;卡尔曼滤波器公式理解;面试答法;
上一篇卡尔曼滤波器一中,从整体上认识了,卡尔曼滤波器整体是在做一件什么事。 知道了,协方差就可以理解为偏差,或者误差。 这一篇主要讲卡尔曼滤波器中的公式,理解公式,就能知道如何实现卡尔曼滤波器。 上一篇:卡尔曼滤波器在做一件什么事,这一篇,卡尔曼滤波器怎么…...

高性能日志系统 日志输出模块逻辑
概述 该模块主要实现了一个日志系统的输出模块,通过多态、工厂模式等设计模式,构建灵活的日志输出架构。 功能:格式化完成的标准日志消息,输出到指定为止拓展:支持同时将日志落地到不同的位置,也就是输出日…...

haproxy基础
目录 1 HAProxy介绍 1.1 版本对比 1.2 HAProxy功能 2 参数介绍与实践 2.1 global参数说明 2.2 真实代码格式实例 2.3 常用全局参数 2.3.1 nbproc -- 开启几个进程 2.3.2 cpu-map(CUP绑定) 2.3.3 nbthread 2 --开启2个线程 3 Proxies配置 3.1 Proxies配置-defaults 3.2 Proxi…...

C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)
📚 本文主要总结了一些常见的C面试题,主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能,掌握这些内容,基本上就满足C的岗位技能(红色标记为重点内容),欢迎大家前来学习指正&…...

LVS实验——部署DR模式集群
目录 一、实验环境 二、配置 1、LVS 2、router 3、client 4、RS 三、配置策略 四、测试 1.Director服务器采用双IP桥接网络,一个是VPP,一个DIP 2.Web服务器采用和DIP相同的网段和Director连接 3.每个Web服务器配置VIP 4.每个web服务器可以出外网…...

pythonUI自动化008::allure测试报告(安装及应用)
allure报告预览 1 下载jdk,配置jdk Path变量: https://www.cnblogs.com/FBGG/p/15103119.html(这里不作阐述,请看该偏文章配置即可) 2 下载allure驱动,配置allure Path变量: 下载allure驱动&a…...
常用的 git 和 linux 命令有哪些?
对于 Git 命令: 1. git init:初始化一个新的 Git 仓库。 2. git clone:克隆一个远程仓库到本地。 3. git add:将文件添加到暂存区。 4. git commit:提交暂存区的更改。 5. git status:查看工作区和暂存…...
MYSQL 删除一个字段前,判断字段是否存在
开发过程中经常需要提交可以重复执行的sql,当设计到需要增加字段时,可以参考如下办法: 1.如果是mysql 版本高于5.7.5 ALTER TABLE table_name DROP COLUMN IF EXISTS column_name; 2.通用方法 写一个存储过程,然后用存储过程取…...

vulnstack-5
环境搭建 靶场虚拟机共用两个,一个外网一个内网,用来练习红队相关内容和方向,主要包括常规信息收集、Web攻防、代码审计、漏洞利用、内网渗透以及域渗透等相关内容学习。 虚拟机密码 win7 sun\heart 123.com sun\Administrator dc123.com # …...

回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出
回归预测|基于灰狼优化GWO-Transformer-LSTM组合模型的数据回归预测Matlab程序 多特征输入单输出 文章目录 前言回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出GWO-Transformer-BiLSTM 一、GWO-Transformer-BiLSTM模型二、实验…...

STM32的USB接口介绍
STM32 USB接口是STM32微控制器系列中集成的一种通信接口,它允许STM32微控制器与外部设备或计算机进行高速的数据传输和通信。以下是STM32 USB接口的简要介绍: 1. 接口类型 STM32的USB接口通常支持USB 2.0标准,部分高端型号可能还支持USB 3.…...

【中等】 猿人学web第一届 第2题 js混淆 动态cookie 1
目录 调试干扰Hook Function 加密参数定位hook Cookie AST 解混淆字符串解密还原解密函数AST 配合解密函数还原字符串 ASCII 编码字符串还原字符串相加花指令(对象)剔除无用代码虚假 if剔除无引用代码剔除无引用的对象数值还原 switch 还原完整的 AST 代码代码注意 还原加密 请…...

ubuntu 22.04 安装 docker(服务器从毛胚到精装)
1、用户操作 阿里云默认是 root 用户,我们一般要自己创建一个用户,然后给该用户 sudo 权限 添加用户 sudo adduser newUserName赋予sudo权限 sudo usermod -aG sudo newUserName删除用户 sudo deluser --remove-home --remove-all-files newUserNam…...

Vue3从零开始——如何巧妙使用setup语法糖、computed函数和watch函数
文章目录 一、setup语法糖二、computed函数2.1 computed的基本用法2.2 computed vs methods2.3 注意事项 三、watch函数3.1 watch的基本用法3.2 immediate和deep选项 四、综合小Demo五、总结 一、setup语法糖 之前我们在编写代码时每次都要编写setup() ,默认导出配置&#x…...

【C++】 特殊类设计:从构思到实现,引领设计新潮流
🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 🚀 前言 一: 🔥 不能被拷贝的类 二: 🔥 只能在堆上创建对象的类 三: 🔥 只能在栈上创建对象的…...

性能调优 18. Tomcat整体架构及其设计精髓分析
1. Tomcat介绍 1.1. 介绍 这边使用的是Tomcat9来做说明,本章节先对Tomcat架构和设计有个整体认识。后续章节会对Tomcat性能调优做说明。 官方文档介绍 https://tomcat.apache.org/tomcat-9.0-doc/index.html1.2. Tomcat概念 …...

【C++高阶】:特殊类设计和四种类型转换
✨ 人生如梦,朝露夕花,宛若泡影 🌏 📃个人主页:island1314 🔥个人专栏:C学习 ⛺️ 欢迎关注:👍点赞 👂&am…...

kafka基础概念二
1.Kafka中主题和分区的概念 1.主题Topic 主题-topic在kafka中是一个逻辑的概念,kafka通过topic将消息进行分类。不同的topic会被订阅该topic的消费者消费 但是有一个问题,如果说这个topic中的消息非常非常多,多到需要几T来存,因…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...