自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 收藏
  • 关注

原创 分治(8题)

当我们将两个已经排序好的部分内的元素合并时,他们的大小关系有传递性,例如,nums[cur1]右侧的数都比它大,那么当nums[cur1]比nums[cur2]大的时候,这时nums[cur1]右侧所有的元素也就都比nums[cur2]大。那么我们的整体逻辑就有了,我们要计算一整个数组,第一步可以把它分成两块,分别算算左右两个数组中每个位置右侧小于当前元素的个数,第二步再分别算算以左侧数组中的每个元素为基准,右侧数组中有多少个元素小于这个元素,加上即可。数据有重复的情况下,分三块的效率更高。

2025-04-06 14:22:40 1096

原创 Linux线程

什么是线程?我们认为,线程是操作系统调度的基本单位重新理解进程 内核观点:我们认为进程是承担分配系统资源的基本实体执行流是资源吗?线程是进程内部的执行流资源!每一个执行流的本质是一个调用链,我们把一个个宏观的调用链所对应的栈帧结构在栈上进行开辟,我们每次定义变量,比如在main函数中,或者在什么函数中,都是在这些函数自身的栈帧结构中进行定义的。栈结构它的本质是为了支持我们在应用层来完成整个调用链所对应的临时变量的空间的开辟和释放。

2025-03-03 22:24:14 872

原创 Linux信号

是忽略,(即默认,忽略,捕捉,三种方式中的默认,但是处理的具体方法是忽略)父进程可以自 定义SIGCHLD信号的处理函数,这样父进程只需专心处理自己的工作,不必关心子进程了,子进程 终止时会通知父进程,父进程在信号处理函数中调用wait清理子进程即可。,有可能在第一次调用还没返回时就再次进入该函数,这称为重入,insert函数访问一个全局链表,有可能因为重入而造成错乱,像这样的函数称为 不可重入函数,反之,如果一个函数只访问自己的局部变量或参数,则称为可重入(Reentrant) 函数。

2025-02-23 22:38:25 973

原创 进程间通信

1.1分析输入的命令行字符串,获取由多少个|,把命令打散成多个子命令字符串1.2malloc空间,pipe申请多个管道1.3循环创建多个子进程,每一个子进程的重定向情况:最开始:输出重定向,把标准输出重定向到指定的一个管道的写端中间:把 0标准输入重定向到上一个管道的读端,把1标准输出重定向到下一个管道的写端最后一个:输入重定向,把标准输入重定向到指定一个管道的读端。

2025-02-12 16:22:51 783

原创 BFS解决拓扑排序(3题)

3.重复1.2操作,直到图中没有点 或者 图中没有度为0的点为止(因为有可能有环)邻接表我们可以使用vector嵌套vector,也可以使用哈希表,其中哈希表比较通用一些。必须要初始化, 不然刚开始的时候找不到入度为0的值。比如要统计每个节点的入度 我们用一个vector<int> 来统计。找到做事情的先后顺序,拓扑排序的结果可能不是唯一的。1.初始化:把所有入度为0的点加入队列中即可。c.判断 与删除边相连的点,是否入度变成0。1.找出图中入度为0的点,然后输出。如果入度为0,加入到队列中。

2025-02-09 23:24:29 305

原创 多源最短路问题(4题&&边权为1)

如何解决?把所有的原点合成一个“超级原点”,就能把问题转化为单源最短路问题我们只需要把所有原点都加入到队列里面然后一层层向外扩展即可。这里不严谨证明。在扩展的过程中就会有原点被筛选掉。

2025-02-09 15:44:21 391

原创 BFS解决最短路问题(4题&&边权为1)

解法:从起点开始,来一个BFS即可为什么能找出最短路?其实相当于从起点同时出发很多个小人,大家的速度都相同,看谁先到终点。在路途中如果有小人经过一个地方,但是发现已经有人来过了,那么这个小人就会被抛弃,因为大家速度一样,这说明有其他小人的路径比你短如何找出最短路径的长度呢?扩展的层数就是最短路的长度。

2025-02-08 18:43:07 433

原创 优先级队列(堆 4题)

1046. 最后一块石头的重量 - 力扣(LeetCode)我们每次把堆顶的两个元素取出来相减,不为0则加入堆中继续public:heap.pop();heap.pop();

2025-02-07 23:10:52 290

原创 队列 + 宽搜(4题)

(如果节点编号很大,会出现溢出,但是在本题我们不用担心,我们知道,我们的数据存储实际上是一个环,因此即使数据溢出,他们两个的差只要不超过这个环的大小,那么他们的差就是合法的,可以计算的。这题需要注意的点是节点里面的最小值是INT_MIN,我们把tmp的初始值初始为INT_MIN。对于这题,我们需要在队列中存储一个pair,里面既要有节点指针,也要有一个编号。我们只需要把某一层最右侧的节点编号减去最左侧的,即可得出宽度。我们只需要把某个节点出队的时候把它的孩子节点添加进来即可。

2025-02-04 21:04:52 577

原创 栈(5题)

当我们遇到 + - 的符号的时候,我们先要把接下来的数字入栈,因为如果后面有 * /运算符,这个数就要和后面的数进行运算。当遇到* / 符号的时候,直接把这个数和栈顶的数进行运算。3.如果遇到‘]’:把数字栈栈顶的元素和字符串栈栈顶的元素分别出栈,并且拿出来进行运算,然后把运算出来的结果插入到新的字符串栈栈顶元素的后面(因为我们得出的运算结果可能是在另一对括号中的)值得注意的点是,我们需要事先把字符串栈中加入一个空字符串,避免当栈里面只有一个元素的时候,把原栈顶元素加入新栈顶元素的时候栈为空。

2025-02-03 22:16:39 559

原创 记忆化搜索(5题)

是什么?是一个带备忘录的递归如何实现记忆化搜索1.添加一个备忘录(建立一个可变参数和返回值的映射关系)2.递归每次返回的时候把结果放到备忘录里3.在每次进入递归的时候往备忘录里面看看。

2025-01-31 21:51:41 894

原创 floodfill算法(6题)

本质就是找出性质相似的连通块。

2025-01-30 16:28:36 496

原创 递归搜索回溯综合练习(十五题)

我们只需要注意剪枝的判断条件即可,我们引入一个坐标系,使用row和i(这里的i实际上就是col)的函数对应关系来标记对角线上是否有皇后。它的决策树是这样子的,也是每个节点都作为一个结果,没有边界条件。如果在某种填法下我们发现这种填法最终是不行的,那么我们返回false被最上层接收时,会进行恢复路径,即 board[i][j] = '.';值得注意的是,这里的恢复现场要等这个数字的选择全部结束后再一次性恢复。本题的关键是剪枝策略,我们用三个数组来表示某行,某列,某个小的3*3方格中有没有某个数字。

2025-01-27 16:36:47 942

原创 共享内存、消息队列和信号量

1.信号量本质上一把计数器,PV操作是原子的2.执行流申请资源,必须先申请信号量资源,得到信号量之后才能访问临界资源3.信号量是0.1两态的被称为二元信号量,就是互斥功能4.申请信号量的本质就是对临界资源的预定机制信号量凭什么是进程间通信中的一种?1.因为通信不仅仅是通信数据,互相协同也是通信的一种2.要协同,本质也是通信,信号量首先要被所有的通信进程看见。

2025-01-06 14:43:17 1087

原创 二叉搜索树

首先查找元素是否在二叉搜索树中,如果不存在,则返回, 否则要删除的结点可能分下面四种情。情况d:在它的右子树中寻找中序下的第一个结点(关键码最小),用它的值填补到被删除节点。情况b:删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点--直接删除。情况c:删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点--直接删除。a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。b. 树不空,按二叉搜索树性质查找插入位置,插入新节点。中,再来处理该结点的删除问题--替换法删除。

2024-12-05 11:42:58 371 1

原创 Linux文件系统

1.第三方库,往后使用的时候必定要带 -l 选项(但是像系统提供的fork,wait,或者语言提供的,如c语言提供的printf等,我们不需要带 -l选项)2.gcc默认进行动态链接,但是如果系统中只提供静态库,gcc则只能对该库进行静态链接(ldd可以查看Linux系统下动态库依赖关系)3.如果系统中需要链接多个库,那么gcc可以链接多个库,只需要在-l 后面加4.如上图,一个程序是可以混合链接的,既可以有动态链接也可以有静态链接。

2024-11-27 15:27:31 925

原创 穷举vs暴搜vs深搜vs回溯vs剪枝

当i == 0 (i为下标)时候它下面的递归有i == 1, i == 2,即最左侧的那种情况,接着因为在第二层的时候k会不断累加,所以只有i == 0和i == i的情况。函数体关注某个节点在干什么。这个方法是比较传统的方法,从前往后的每个数都分选和不选,在叶子节点的时候加入ret,递归出口就是i == nums.size()。如果选,dfs后要恢复,如果不选则不需要。首先我们要解决的问题是怎样把每层不需要的数,如第二层第一个中的1,以及这棵树中下一层的1.2,我们可以用一个bool数组来解决。

2024-11-19 22:13:29 384

原创 二叉树的深搜(6题)

由题意我们知道,一开始要找到最小的那个数必须不断进入左子树寻找,然后再看本节点,那么本质上就是一个中序遍历,中序遍历每找到一个值就把count--。这题我们主要是要意识到回溯里面的“恢复路径”,path即为路径,但是这题里面将path作为全局变量并不合适,当返回上一层的时候必须尾删,频繁的增删会使代码变得复杂。我们以一个节点为例,如果这个节点不为空,第一步我们先求出这个节点的值并更新,然后查看它是否有左右子节点,如果都没有那就直接返回更新后的prenum。出口是当root为空的时候。

2024-11-19 15:47:45 580

原创 递归(6题)

如果我们一开始直接反转第一第二个链表的话,就会找不到第三个链表,因此我们使用reverseList函数来反转后面的链表,我不关心你是怎么样实现的,但是我相信你能把链表逆置后再把新的头节点返回给我。这道题目较为容易,我们要两两交换,只需要考虑一次两两交换节点即可,交换之后将第二个节点与后面的节点相连,我相信我这个函数可以帮我做到将后面的节点两两交换,最后用一个变量接收返回值。如果l1的节点数值更小,那么把l1连到tail后面,且此时l1变为新的tail,l1的next变为新的l1,l2不变。

2024-11-14 18:39:35 737

原创 Linux基础IO

w Truncate(缩短) file to zero length or create text file for writing.1.进程也有进程的当前路径cwd,该进程建立的文件会建在该进程的当前路径,当我们更改了当前进程从cwd,就可以把文件新建到其它目录下了。2.w,写入之前都会对文件进行清空处理3.w/a都是写入,而和w不同的是,a是追加写。pathname: 要打开或创建的目标文件。

2024-10-23 22:29:32 1060

原创 Linux shell的简单实现

【代码】Linux shell的简单实现。

2024-10-20 22:07:46 128

原创 Linux进程替换

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。我们可以先复习一下进程地址空间的相关知识cpu执行进程时,会通过页表映射到其代码和数据当我们进行进程替换时,即使用替换函数执行ls时,ls会。

2024-10-17 09:31:22 535

原创 MySQL用户管理

如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。

2024-10-13 00:43:57 457

原创 MySQL视图

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

2024-10-13 00:17:50 250

原创 MySQL事务管理

事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。

2024-10-12 00:56:44 1039

原创 MySQL索引

如何理解硬盘如何理解柱面,磁道,扇区,磁头InnoDB 主键索引和普通索引MyISAM 主键索引和普通索引其他数据结构为何不能作为索引结构,尤其是B+和B聚簇索引 VS 非聚簇索引。

2024-10-10 00:07:19 1333

原创 MySQL表的内连和外连

表的连接分为内连和外连。

2024-10-06 17:20:41 209

原创 MySQL复合查询

多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。显示工资比部门30的任意(随意一个)员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)显示雇员名、雇员工资以及所在部门的名字因为上面的数据来自EMP和DEPT表,因此要联合查询。查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的。显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。查找每个部门工资最高的人的姓名、工资、部门、最高工资。

2024-10-06 11:14:05 729

原创 MySQL内置函数

如果是多字节字符则计算多个字节数;比如:字母,数组算作一个字节,中文表示多个字节数(与字符集编码有关)要求显示student表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值。md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串。显示所有留言信息,发布日期只显示日期,不用显示时间。这里的时间戳并不是一串数字,而是日期与时间都显示。以首字母小写的方式显示所有员工的姓名。

2024-10-05 21:39:24 590

原创 MySQL表的增删改查

CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)

2024-10-03 13:23:34 1269

原创 MySQL:表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,

2024-09-24 22:09:53 1153

原创 C++中的多态

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件1. 必须通过基类的指针或者引用调用虚函数2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写普通的函数调用,调用函数的类型是谁,就调这个类型的函数看这一个函数,里面调用的就是Person这个类里面的函数。

2024-09-21 01:45:55 738

原创 C++中的继承

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public:protected:// 姓名// 年龄// 继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。这里体现出了。

2024-09-18 21:49:43 1421

原创 堆排序,快速排序

如果遇到比key大的值,就会拉开差距,此时如果cur遇到比key小的值,这个值就会和一个比key大的值交换,因为prev和cur原本中间隔着的都是大于key的值,++prev后再交换就会是这样的结果。情况3,left与right先各自移动并且交换一次,然后right再移动和left相遇,此时因为已经交换过,a【left】处储存的值小于a【keyi】因此也符合。3.重复以上操作,直到left==right,然后把key值填入这个坑中,此时这个位置一定是坑,因为left和right永远有一个是坑。

2024-09-16 01:51:06 946 1

原创 MySQL数据类型

当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。(0为假,非0为真)实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]

2024-09-15 16:08:44 1160

原创 链表(4题)

1.画图,直观形象,便于我们理解2.引入虚拟“头”节点便于处理边界情况方便我们对链表操作3.不要吝啬空间,大胆定义变量比如prev cur next,定义好之后把相应节点的指针存进去,然后就可以不用考虑前后顺序,不用担心找不到节点了4.快慢双指针判环,找链表中环的入口,找链表中倒数第n个节点。

2024-09-13 23:47:50 416

原创 数据库与表的操作

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时,可以打开看看 mytest.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。2.数据库校验集 - 支持数据库,进行字段比较使用的编码,本质也是一种读取数据库中数据的采用的编码格式。

2024-09-13 20:13:35 1616

原创 数据库基础

存储数据用文件就可以了,为什么还要弄个数据库?文件保存数据有以下几个缺点:文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便数据库存储介质:磁盘内存为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。

2024-09-11 18:29:25 1002

原创 插入、希尔、冒泡、选择排序

当gap为一个很大的值时,例如n/3,就有n/3组,按照每组元素个数相等,每组最坏的情况下,要进行1+2+3次置换,那么时间复杂度约为2N,即O(n)的时间复杂度。当gap为1时候,最坏情况下,时间复杂度理论上为1+2+3+4+....+n-1,但是因为已经进行过预排序,所以整个数组几乎是有序的,时间复杂度也是O(n)层次。从第一个元素开始,将这个元素和后面的元素比较,若更大,交换两个元素,一直到末尾,这样一次排序后最后一个元素必定为最大元素。1.预排序,间隔gap的个元素分为一组,一共gap组。

2024-09-07 23:54:40 591

原创 哈希表(5题)

把异位词字符串排好序之后都是一样的,所以我们把排完以后相同的字符串作为标志,把这些字符串一个个填进去。我们只需要一边判定一边把数组中的内容往里面塞即可。思路同1,一边判断一边把数塞进去。

2024-09-04 20:58:23 348

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除