自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣刷题——二分查找总结

我们可以总结出二分查找的通用做法和常见变种。二分查找是一种在有序数组中高效查找元素的算法,时间复杂度为 O (log n)。二分查找的核心思想是将搜索范围不断缩小一半,直到找到目标元素或确定其不存在。以下是通用模板:cpp。

2025-05-11 19:00:16 347

原创 力扣HOT100——207.课程表

你这个学期必须选修numCourses门课程,记为0到。在选修某些课程之前需要一些先修课程。先修课程按数组给出,其中,表示如果要学习课程ai则先学习课程bi。[0, 1]01请你判断是否可能完成所有课程的学习?如果可以,返回true;否则,返回false。true总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。这是可能的。

2025-04-30 16:18:42 493

原创 力扣HOT100——102.二叉树层序遍历

给你二叉树的根节点root,返回其节点值的。(即逐层地,从左到右访问所有节点)。

2025-04-26 22:56:09 436

原创 Myweb项目——面试题总结

在 main 函数中,调⽤ create_socket 创建服务器套接字, 使⽤ accept 接收客⼾端连接,并为每个客⼾端创建独⽴线程,调⽤ fun 函数 处理请求,通 过 pthread_create 实现多线程并发处理,提⾼服务器的并发处理能⼒,避免客⼾端请求阻塞。前端开发:设计了具有吸引⼒的主⻚和 404 ⻚⾯,呈现了醒⽬的标题,添加了背景⾳乐和背 景图⽚,展⽰了歌⼿信息,使⽤表格和超链接展 ⽰歌⼿的专辑封⾯图⽚,这些图⽚链接到⽹易 云⾳乐的相应专辑⻚⾯,⽅便⽤⼾跳转查看更多信息。

2025-04-26 22:10:37 663

原创 内存池管理项目——面试题总结

伙伴系统算法实现:定义WORD b结构体⽤于表⽰内存块,含前驱指针llink、标识tag、块⼤⼩幂次kval和后继指针rlink;MyFree函数判断释放块与伙伴块状态,合并空闲伙伴块后将其插⼊相应可利⽤空间链表;Show函数输出占⽤块信息,ShowPav函数输出 可利⽤空间表中所有空闲块信息。通过InitMem函数初始化内存池, 在内存池前后添加 “墙” 防⽌越界;项⽬概述:本项⽬通过实现⾸次拟合法和伙伴系统算法,完成对内存池的管理,旨在为程序提供⾼效、合理的内存分配与回收机制,优化内存使⽤效 率。

2025-04-26 22:05:26 804

原创 腾讯一面-软件开发实习-PC客户端开发方向

介绍了专辑鉴赏项目,前端使用html语言编写,后端基于http协议使用C语言进行网页开发。此外,还提及项目中涉及处理多线程问题以及做过内存池管理项目。

2025-04-21 20:53:57 707

原创 力扣刷题HOT100——53.最大子数组和

给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。

2025-04-15 20:36:38 339

原创 力扣刷题HOT100——239.滑动窗口的最大值

给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。滑动窗口的位置 最大值。

2025-04-15 16:43:26 134

原创 力扣HOT100——560.和为k的子数组

给你一个整数数组nums和一个整数k,请你统计并返回该数组中和为k的子数组的个数。子数组是数组中元素的连续非空序列。2前缀和+哈希。我们可以先利用一个数组s存储原数组的前缀和,在遍历s的时候利用一个哈希tmp来记录当前元素s[i]出现的次数,同时寻找它们tmp中是否存在是s[i]-k,如果存在,则答案ans加上tmp[s[i]-k],即s[i]-k此前出现的次数。

2025-04-15 11:06:12 248

原创 力扣刷题HOT100——438.找到字符串中所有字母异位词

给定两个字符串s和p,找到s中所有p的的子串,返回这些子串的起始索引。不考虑答案输出的顺序。[0,6]起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

2025-04-14 20:31:59 303

原创 力扣HOT100——无重复字符的最长子字符串

给定一个字符串s,请你找出其中不含有重复字符的的长度。3因为无重复字符的最长子串是"abc",所以其长度为 3。

2025-04-14 19:29:20 296

原创 力扣HOT100——最长连续序列

给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。4最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

2025-04-11 17:31:41 154

原创 力扣HOT100——49.字母异位词分组

给你一个字符串数组,请你将组合在一起。可以按任意顺序返回结果列表。是由重新排列源单词的所有字母得到的一个新单词。strs =

2025-04-11 16:43:56 130

原创 力扣刷题——1339.分裂二叉树的最大乘积

其中第一个递归函数dfs用来计算二叉树值的总和num。第二个递归函数dfs2用来计算最终答案,在递归中,不断计算当前节点作为根节点的子树的值的总和tmp,然后计算mval=tmp*(num-tmp);,再跟新最大值maxavl。删除红色的边,得到 2 棵子树,和分别为 11 和 10。它们的乘积是 110 (11*10)请你删除 1 条边,使二叉树分裂成两棵子树,且它们子树和的乘积尽可能大。由于答案可能会很大,请你将结果对 10^9 + 7 取模后再返回。给你一棵二叉树,它的根为。

2025-04-10 19:53:42 247

原创 力扣刷题——3319.第k大的完美二叉子树的大小

完美二叉树是指二叉树的所有内部节点(非叶子节点)都有两个子节点,并且所有叶子节点都在同一层上。例如,深度为 3 的完美二叉树,其形状像一个等边三角形,每一层的节点数都达到了该层能容纳的最大值。我们发现根据深度可以得到完美二叉树的节点数量,所以我们只需递归计算每个完美二叉树的深度,将其都记录起来,最后就可以找到第。完美二叉子树的根节点在图中以黑色突出显示。是指所有叶子节点都在同一层级的树,且每个父节点恰有两个子节点。大的完美二叉子树的大小是 3。的深度,从而计算出它的大小。的大小,如果不存在则返回。

2025-04-10 19:15:51 285

原创 内存池项目(4)——总结

答案:内存池是一种内存管理技术,它在程序运行开始时预先分配一块较大的内存空间作为池,当程序需要分配小块内存时,直接从这个池中获取,而不是每次都向操作系统申请。当使用完这些小块内存后,也不是立即归还给操作系统,而是将其放回内存池,以便后续再次使用。这样可以减少内存分配和释放的系统开销,提高内存分配效率,同时也有助于减少内存碎片。

2025-04-10 09:48:13 650

原创 力扣刷题——2265.统计值等于子树平均值的节点数

给你一棵二叉树的根节点root,找出并返回满足要求的节点数,要求节点的值等于其中值的。nnnrootroot5对值为 4 的节点:子树的平均值 (4 + 8 + 5 + 0 + 1 + 6) / 6 = 24 / 6 = 4。对值为 5 的节点:子树的平均值 (5 + 6) / 2 = 11 / 2 = 5。对值为 0 的节点:子树的平均值 0 / 1 = 0。对值为 1 的节点:子树的平均值 1 / 1 = 1。对值为 6 的节点:子树的平均值 6 / 1 = 6。

2025-04-08 21:36:43 173

原创 内存池项目(3)——内存池设计之伙伴系统

是操作系统中用到的另一种动态存储管理方法。它和边界标识法类似,在用户提出申请时,分配一块大小“恰当”的内存区给用户:反之,在用户释放内存区时即回收。所不同的是:在伙伴系统中,无论是占用块或空闲块,其大小均为2的k次幂(k为某个正整数)。例如:当用户申请n个字的内存区时,分配的空闲块大小为2^k个字(2^(k-1)<n<=2^k)。若总的可利用内存容量为 2^m个字,则空闲块的大小只可能为2^0、2^1...2^m。

2025-04-08 20:43:44 653

原创 力扣刷题——606.根据二叉树创建字符串

之后,根据当前节点左右子树的具体情况进行递归处理:若左右子树都存在,分别递归处理左子树和右子树,将它们的结果用括号括起来后依次拼接到结果字符串上;若只有右子树,则先在结果字符串中添加表示左子树为空的空括号,再递归处理右子树并将其结果用括号括起来拼接到结果字符串。初步转化后得到 "1(2(4)())(3()())" ,但省略所有不必要的空括号对后,字符串应该是"1(2(4))(3)"。,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对。

2025-04-08 16:11:51 310

原创 内存池项目(2)——内存池设计之边界标识法

特点:在每个内存区的头部和底部两个边界上分别设有标识,以标识该区域为占用块或空闲块,方便在释放时对相邻的空闲块进行合并。

2025-04-07 20:04:15 834

原创 内存池项目(1)——前置知识

在后面的内存池设计方案中,通过减少向操作系统频繁申请和释放内存的操作,可避免系统调用带来的额外开销,使得程序执行诸如数据处理、任务调度等关键流程时更加流畅,像实时控制系统,每一秒的延迟都可能引发严重后果,精准的内存管理保障其快速响应。因为按最佳拟合的原则进行分配时,总是找大小最接近请求的空闲块,由此系统中可能产生一些存储量甚小而无法利用的小片内存,同时也保留那些很大的内存块以备响应后面将发生的内存量特大的请求,从而使整个链表趋向于结点大小差别甚远的状态。在回收时,只要将释放的空闲块插人在链表的表头即可。

2025-04-06 20:35:05 605

原创 力扣刷题——508.出现次数最多的子树和

给你一个二叉树的根结点root,请返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。一个结点的定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。[2,-3,4]

2025-04-05 15:40:29 158

原创 近日八股——计算机网络

i.如果客户端最后一个确认报文丢失后,服务器无法进入关闭状态,会反复重传FIN报文。因此等待时间2msl,可以确保服务器可以收到最后TCP确认报文ii.客户端发送最后一个TCP确认报文段后,经过2MSL时长,可以使当前所有产生的报文段从网络中消失。i.2MSL是报文最大生存时间,任何超过该时间的报文都将丢弃ii.2MSL是因为网络中存在发送方的数据包,当这些发送方的数据包被接受方处理后又会被响应,所以来回需要2MSL。

2025-04-03 20:56:57 468

原创 力扣刷题——2331.计算布尔二叉树的值

如果要计算出当前节点 node 的值,我们需要先计算出两个叶子节点组成的子树的值分别为 lval 与 lval,然后再计算出当前节点组成的子树的值。AND 与运算节点的值为 False AND True = False。OR 运算节点的值为 True OR False = True。根节点的值为 True ,所以我们返回 true。上图展示了计算过程。

2025-04-03 19:30:32 362

原创 力扣刷题——1448——统计二叉树中好节点的数目

给你一棵根为root的二叉树,请你返回二叉树中好节点的数目。「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。4图中蓝色节点为好节点。根节点 (3) 永远是个好节点。节点 4 -> (3,4) 是路径中的最大值。节点 5 -> (3,4,5) 是路径中的最大值。节点 3 -> (3,1,3) 是路径中的最大值。解题思路:递归地遍历二叉树的每个节点。

2025-04-01 18:22:11 304

原创 力扣刷题————199.二叉树的右视图

想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

2025-04-01 17:22:19 179

原创 今日八股——Mysql数据库

其实,索引就是排序,如果没有索引,查找就需要一个一个搜索,效率会非常慢,索引是一个单独的,存储在磁盘上的数据结构,使用索引可以快速找出某个或多个列中的特定值的行,对相关列使用索引是提高查询操作速度的最佳途径。缓存击穿,是指一个 key 是热点数据在不停的扛着大量并发,大并发集中对这一个 key 进行访问,当这个 key 在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就会对数据库造成极大的压力。当流量到达一定的阈值时,就直接返回“系统拥挤”之类的提示,防止过多的请求打在数据库上。

2025-04-01 16:49:40 537

原创 今日八股——C++

1、struct访问权限默认是public,class访问权限默认是private.这个原因是struct原本是C的关键字,C没有访问权限,所有的都是公有的,C++兼容C,必须让struct默认也是public.2、还有一个区别:“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数1.重载:是在同一个类里实现的,函数名相同,参数不同(包括参数类型,个数),virtual可有可无。

2025-04-01 16:41:36 1974 1

原创 力扣刷题——1171.从链表中删除连续和为0的节点

第二遍同样记录所有节点的前缀和,将当前节点的下一个节点置为哈希表中当前前缀和对应的节点的下一个节点。这样做的原因是因为当两节点前缀和一致时,要么两节点相等,要么两节点之间的节点值的和为0,删除中间这些节点就好了。第一遍记录所有节点的前缀和放入哈希表内,当两节点的前缀和一致时直接覆盖掉之前存储的节点。的连续节点组成的序列,直到不存在这样的序列为止。删除完毕后,请你返回最终结果链表的头节点。(注意,下面示例中的所有序列,都是对。思路:前缀和+哈希表。答案 [1,2,1] 也是正确的。给你一个链表的头节点。

2025-03-31 17:51:49 130

原创 1019.链表的下一个最大节点

循环检查栈是否为空且当前节点的值是否大于等于栈顶元素的值。如果满足条件,则弹出栈顶元素,直到栈为空或者当前节点的值小于栈顶元素的值。利用stack先进先出的特性,递归的寻找下一个更大节点,使用。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值。)的下一个更大的节点的值。个节点没有下一个更大的节点,设置。对于列表中的每个节点,查找下一个。

2025-03-31 17:13:35 159

原创 力扣刷题——排序链表

思路:我们可以采用二分加合并两个有序链表的方法,找到链表的中间节点,然后将其分为两个子链表递归的进行合并。因为我们采用了递归,所以在合并两个链表时就会对其进行排序,合并完成后的链表即为有序的。

2025-03-31 16:49:51 261

原创 力扣刷题——143.重排链表

我们可以借助寻找链表中间节点和逆置链表的方法来将链表的后半部分逆置然后操作。为什么要这样做呢,因为题目中链表中节点顺序的变化实际上是这样的。我们可以发现,当我们逆置后半部分链表后,实际上就是遍历后半部分链表,将其中的节点逐个按照题目规则插入到前半部分链表中。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

2025-03-21 20:28:34 334

原创 今日八股——(3).C++

在类中重新定义运算符,赋予运算符新的功能以适应类的运算,就称为运算符重载运算符重载是一种形式的C++多态,它使得对象操作更直观,本质上也是属于函数重载让运算符能在类中被使用,并根据类的定义,具备特有的含义.例如学生类,可以重载+,从而实现两个学生的相加,当然加法的具体含义根据实际情况而定,可以是分数相加,可以是学习的课程数量相加等重载的基本要求是:1.重载后的运算符至少有一个操作数是用户定义的类型。这是防止你为内置类型重载运算符你不能将减法(-)重载为两个整数的和。

2025-03-21 16:25:24 950

原创 力扣刷题——2074.反转偶数长度组的节点

个节点,若在遍历过程中到达链表末尾则停止。在每次循环中,首先要计算当前组实际的节点数量。长度组中的节点,并返回修改后链表的头节点。- 第一组长度为 1 ,奇数,没有发生反转。- 第三组长度为 3 ,奇数,没有发生反转。组,这些非空组的长度构成一个自然数序列(- 最后一组长度为 4 ,偶数,节点反转。- 第二组长度为 2 ,偶数,节点反转。所指向的节点,这样就完成了该组的处理。注意,最后一组的长度可能小于或者等于。是偶数,就需要反转该组的节点。是奇数,不进行反转操作,直接将。移动到当前组的最后一个节点,即。

2025-03-20 20:44:30 246

原创 力扣刷题——25.K个一组翻转链表

而在这道题中,在一次反转结束后p0还指向当前反转的部分链表的头节点,我们需要将p0移动到指向下一次反转的头节点,也即是当前部分链表的尾节点,然后重新定义p1,p2,p3再移动下一部分。,这里不再赘述,重点是如何循环地反转链表的多个部分。要解决这道题,就要利用部分反转链表的方法,具体可以参考我的上一篇博客。是一个正整数,它的值小于或等于链表的长度。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。的整数倍,那么请将最后剩余的节点保持原有顺序。个节点一组进行翻转,请你返回修改后的链表。

2025-03-20 19:40:08 254

原创 力扣刷题——92.反转链表||

由图可知,在进行完最后一次循环后,p1指向了第right-1个节点,p2指向了第right个节点。此时只是将要操作的部分链表内部反转了,要将它们在链表中整体反转过来,就要将我们最初记录下来的p0节点指向这个部分链表反转后的“头节点”,也就是p1。要解出这道题,我们需要先找到要操作的第left个节点p1和它的下一个节点p2,并记录下第left-1个节点p0备用。然后利用整体反转链表的方法在循环中不断改变节点指向,直到p1遍历到第right-1个节点。

2025-03-20 09:39:02 424

原创 力扣刷题——2487.从链表中移除节点

要移除每一个右侧有更大数值的节点,可以反过来看,就是移除每个节点左侧比它小的节点。所以我们可以将链表逆置,然后遍历链表移除每个节点左侧数值比它小的节点,遍历完后再逆置一遍返回它的头节点。需要移除的节点是 5 ,2 和 3。移除每个右侧有一个更大数值的节点。- 节点 13 在节点 5 右侧。- 节点 13 在节点 2 右侧。- 节点 8 在节点 3 右侧。给你一个链表的头节点。返回修改后链表的头节点。

2025-03-19 18:03:53 235

原创 今日八股(2)

讲到exit这个系统调用,就要提及另外一个系统调用_exit,_exit()函数位于unistd.h中,相比于exit(),_exit()函数的功能最为简单,直接终止进 程的运行,释放其所使用的内存空间,并销毁在内存中的数据结构,而exit()在于在进程退出之前要检查文件的状态,将文件缓冲区中的内容写回文件。unix提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息,就可以得到: 在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。接收到信号的进程会采取相应的一些行动。

2025-03-19 17:28:47 1006

原创 力扣刷题——725.分割链表

每部分的长度应该尽可能的相等:任意两部分的长度差距不能超过 1。这可能会导致有些部分为 null。个部分应该按照在链表中出现的顺序排列,并且排在前面的部分的长度应该大于或等于排在后面的长度。,请你设计一个算法将链表分隔为。

2025-03-17 20:46:04 146

原创 力扣刷题——2181.合并零之间的节点

我们要知道,我们输出的答案当系统读到下一个节点为空时,会认为读到了最后一个节点。所以我们可以使用类似双指针的解法,一个节点一直向后遍历链表,当第一个节点遍历到节点值为0或者链表末尾时,使用一个节点来存储另一个节点遍历过的节点的值的和,然后第一个节点向后走。循环结束后,将第一个节点当前位置的next置为空代表链表结束。,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。移除,修改后的链表不应该含有任何。分隔开的一连串整数。返回修改后链表的头节点。给你一个链表的头节点。

2025-03-17 19:46:20 352

空空如也

空空如也

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

TA关注的人

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