- 博客(69)
- 收藏
- 关注
原创 优选算法——前缀和
这里需要强调一点,大家不要去死记硬背前缀和的模板,而是要去理解这种思想;比如本题,其实是前缀积,但是本质上和前缀和的思想是一样的。这里的思想类似于动态规划,我们需要定义出两个状态表示。与上题很类似,但是需要一些补充知识;2. 除自身以外数组的乘积。3. 和为k的子数组。1. 数组的中心下标。
2025-05-10 21:29:42
528
原创 优选算法——队列+BFS
在正常的层序遍历过程中,我们是可以把⼀层的结点放在⼀个数组中去的。既然我们有这个数组,在合适的层数逆序就可以得到锯齿形层序遍历的结果。层序遍历即可~仅需多加⼀个变量,用来记录每⼀层结点的个数就好了。2. 二叉树的锯齿层序遍历。4. 在每个树行中找最大值。3. 二叉树最大宽度。
2025-05-10 21:29:38
440
原创 Linux——进程间通信
而此时子进程代码都还没跑完就被终止了,属于异常退出,那么子进程必然收到了某种信号。这里大家发现,管道文件的大小为0,尽管服务端不读取管道当中的数据,但是管道当中的数据并没有被刷新到磁盘,也就说明了双方进程之间的通信依旧是在内存当中进行的,和匿名管道通信是一样的,这也就与我们前面的结论逻辑自洽了。进程间通信的本质就是,让不同的进程看到同一份资源,使用匿名管道实现父子进程间通信的原理就是,让两个父子进程先看到同一份被打开的文件资源,然后父子进程就可以对该文件进行写入或是读取操作,进而实现父子进程间通信。
2025-04-26 19:08:27
1255
1
原创 Linux——动静态库
并且,可执行程序将其入口地址填充到CPU的EIP寄存器中,这样一来CPU就知道了可执行程序从哪里开始执行,然后通过MMU,再加上页表,找到对应程序语句的物理地址,执行语句,如果语句中还在调用其他地方的语句,那么CPU会得到相应的虚拟地址,然后继续查页表,去找到对应物理地址,所以总结来说,进入CPU的都是虚拟地址,出来的都是物理地址。合并了后,空间利⽤率就⾼了,否则,很小的⼀段,未来物理内存也浪费太⼤(物理内存页分配⼀般都是整数倍⼀块给 你,比如4k),所以,链接器趁着链接就把小块们都合并了。
2025-04-26 19:08:12
3551
2
原创 优选算法——优先级队列
• 并且将粉碎后的⽯头放⼊⽯堆中之后,也能快速找到下⼀轮粉碎的最⼤⽯头和次⼤⽯头;这里大家要注意一个点,定义堆的时候要定义成全局的,这样类内两个函数都可以找到。• 每次从⽯堆中拿出最⼤的元素以及次⼤的元素,然后将它们粉碎;• 如何顺利的拿出最⼤的⽯头以及次⼤的⽯头;1. 最后一块石头的重量。2. 数据流中第K大元素。3. 前K个高频单词。4. 数据流的中位数。
2025-04-17 19:10:25
396
原创 动态规划——两个数组的dp问题
这里说明一下,在做字符串类型的dp问题时,我们可以在原字符串的前面加上一个字符,这样下标的关系就不需要去调整了。这里大家需要注意我们的预处理,前面加一个空串可以帮我们解决下标映射的问题。本题和上一题解法一样,可以转化为上一道题。7. 两个字符串的最小ASCII删除和。5. 正则表达式匹配。8. 最长重复子数组。1. 最长公共子序列。
2025-04-09 18:28:23
378
原创 Linux——冯 • 诺依曼体系结构&操作系统初识
当学生的数量多起来了,校长就可以将全部学生的信息组织起来,当然组织的方式有很多种(链表、顺序表、树),而每种组织方式都有其自己的优势,于是就有了一门课程专门教我们管理数据的方式,那就是数据结构。与此同时,键盘将信息加载到内存后,CPU要获取内存中的信息并进行处理,处理完后写回内存,此时你的电脑网卡就回从内存中获取相应的信息,再通过网络传输到对方的电脑。,在你向朋友发送消息这个过程中,你的电脑当中的键盘充当输入设备、显示器和网卡充当输出设备,你朋友的电脑当中的网卡充当输入设备、显示器充当输出设备。
2025-04-01 18:02:04
3583
1
原创 动态规划——回文串问题
这道题看起来比较困难,实际上并不难,我们利用前面动态规划的思想可以瞬间降这道题变得简单。说明:填表顺序那里笔误,应该是从下往上填每一行。6. 让字符串成为回文串的最小插入次数。5. 最长回文子序列。4. 分割回文串II。
2025-04-01 18:01:46
288
1
原创 Linux——Shell运行原理以及Linux权限
大家发现,我们对dir目录来说是other,我们拥有对其写的权限,那么我在dir目录下创建一个新文件test7.txt,此时大家注意这个文件没有写权限,但是我们还是能将它删除,所以这个现象就比较奇怪了,我不能“写”这个文件,但是却可以直接删除它,为了解决这个不合理的问题,Linux引入了。只要用户拥有某目录的可写权限,就可以删除该目录当中的文件,而不论该用户是否拥有该文件的可写权限,这显然是不合理的。2)在Linux当中,所有用户都要隶属于某一个组,哪怕这个组只有你一个人(此时该组就以你的用户名为组名)。
2025-03-12 19:14:04
6086
7
原创 动态规划——子数组系列
这里来总结一下关于初始化我们学到的三个方法,首先最常用的就是添加虚拟节点的方法,使用这个方法大家知道注意两个注意事项,前面的题目分析里有,这里不做赘述;这道题初始化和前面的题目是有所不同的,这里我们根据题目要求可以发现,最差的情况也是1,所以我们直接将f表和g表中的值初始化为1,这样做可以为我们省去一些麻烦。这里需要解释一下,在分析返回值的时候,我们有一种情况是数组中的值都为负数,此时我们不能返回0,0表示啥都不选,题目要求非空子数组。4. 乘积为正数的最长子数组。2. 环形子数组的最大和。
2025-03-12 19:13:57
603
1
原创 优选算法——哈希表
大家来看上面的图,我们需要创建一个哈希表来存储数组下标以及对应位置的值,然后直接在哈希 表中查找每⼀个元素的target - nums[i] ,就能快速的找到「目标和的下标」。其实思路不难,我们只需要创建一个哈希表,把其中一个字符串放进去,对应位置++,然后再遍历另一个字符串,对应位置--,对应位置的值如果刚好都减为0,说明可以重排;我们创建这样的键值对,key为按照ASCII码值排好序的字符串,vaule为对应异位词,将它们放到哈希表中,最后我们需要将哈希表中的vaule提取出来就得到了我们想要的结果。
2025-01-23 21:20:55
1072
原创 C++——继承
继承⼀定程度破坏了基类的封装,基类的改变,对派⽣类有很⼤的影响。多继承:⼀个派⽣类有两个或以上直接基类时称这个继承关系为多继承,多继承对象在内存中的模型 是,先继承的基类在前⾯,后⾯继承的基类在后⾯,派⽣类成员在放到最后⾯。
2025-01-05 17:02:50
968
1
原创 C++——多态
2. 多态的定义及其实现前言前面我们介绍了继承的相关内容,今天我们来介绍多态,这也是C++中一个非常重要的概念。在笔试和面试中经常会考到,所以大家如果对C++感兴趣,请继续阅读本篇内容,下面进入正文部分。1. 多态的概念多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为(静态多态)和(动态多态),这⾥我们重点讲运行时多态,编译时多态(静态多态)主要就是我们前⾯讲的。
2025-01-05 17:01:48
1176
1
原创 vector的模拟实现
如果此时我们使用的是memcpy函数进行拷贝构造的话,那么拷贝构造出来的vector当中存储的每个string的成员变量的值,将与被拷贝的vector当中存储的每个string的成员变量的值相同,即两个vector当中的每个对应的string成员都指向同一个字符串空间。对容器进行析构时,首先判断该容器是否为空容器,若为空容器,则无需进行析构操作,若不为空,则先释放容器存储数据的空间,然后将容器的各个成员变量设置为空指针即可。
2024-12-07 17:21:02
1220
1
原创 STL——string类的模拟实现
前言前言前面为大家介绍了string类的使用,本篇博客我们自己来实现一下string类,这里说明一下,我们只实现一些核心的接口,目的是让大家了解string的底层,加深对string类的理解和掌握,下面进入正文部分。1. 默认成员函数1.1 构造函数构造函数设置为缺省参数,若不传入参数,则默认构造为空字符串。字符串的初始大小和容量均设置为传入的长度(不包括’\0’)这里大家在开空间的时候需要多开一个,因为capacity是不包括\0的,所以我们需要为\0多开一个空间。1.2 拷贝构造函数。
2024-11-26 22:06:06
1162
1
原创 C++——类和对象(part2)
像Stack这样的类,虽然也都是内置类型,但是_a指向了资源,编译器⾃动生成的赋值运算符重载完成的值拷贝/浅拷贝不符合我 们的需求,所以需要我们⾃⼰实现深拷贝(对指向的资源也进行拷贝)。6. 传值返回会产⽣⼀个临时对象调用拷贝构造,传值引用返回,返回的是返回对象的别名(引⽤),没有产⽣拷贝。
2024-11-17 22:12:42
908
1
原创 STL——list的介绍和使用
前言前言本篇博客我们继续来介绍STL的内容,这次我们要介绍的是list这个容器,可以简单地理解为顺序表,当然和我们之前学过顺序表还是有区别的,具体内容大家可以继续往下阅读,下面进入正文。1. list简介1.list是一种可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2.list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立结点当中,在结点中通过指针指向其前一个元素和后一个元素。
2024-10-30 22:50:58
1090
2
原创 STL——vector的介绍和使用
本篇博客为大家介绍vector的内容,之前我们说过的string,vector也是一种容器,学习的模式可以类比string,包括后面要学习的其他容器,它们都有相似之处,也同样都比较重要,是STL的核心内容,所以大家需要重点理解并掌握这里的内容,OK,下面进入正文部分。在该代码中,我们本意是使用元素2的迭代器在原序列中2的位置插入一个10,然后将2删除,但我们实际上获取的是指向2的指针,当我们在2的位置插入10后,该指针就指向了10,所以我们之后删除的实际上是10,而不是2。这里与string是类似的。
2024-10-30 22:50:43
1184
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人