- 博客(20)
- 收藏
- 关注
原创 双指针算法(一)
本文解析了两道力扣数组操作题:283.移动零和1089.复写零。对于移动零问题,使用双指针算法(快慢指针)高效实现O(n)时间复杂度,将非零元素前移并保持原有顺序。复写零问题同样采用双指针法,先确定复写后的元素位置,再逆向填充数组,同时处理边界情况(末尾为0时是否复写)。两题均提供了暴力解法和优化解法代码,双指针方法显著提升性能,避免了数组频繁移动的开销。
2025-10-31 20:40:52
505
原创 二叉树的层序遍历--力扣
在记录节点时队列里面最多会记录两层的数据,在第一层节点进入时队列无节点,第一层出队列时第二层近队列,当第一层完全出队列后第二层完全进队列,此时队列就只有第二次的节点,如此循环。因此可以在入队列的时候记录当前层有多少元素,或者在每次一层循环结束时的队列中节点数即可用一个队列完成遍历,如果不想记录可以用两个队列一个存放当前层节点另一个存放下一层节点,当前层为空时一次循环结束,同时将队列进行交换即可完成层数的变换。输出:[[3],[9,20],[15,7]]输入:root = [1]输入:root = []
2025-10-04 18:28:34
351
原创 栈的压入弹出序列--牛客
例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。本题思路在于模拟入栈出栈的过程,栈空时进行入栈,入栈的栈顶元素与出栈元素相同时出栈不同时进行入栈,因此本题遍历入栈序列时在栈不为空时每入栈一个元素进行一次判断,如果与出栈序列相同就出栈否则持续入栈,在此过程需要注意访问的范围的问题以及栈空的问题。本题需要了解栈的特性,栈的入栈出栈顺序不一定是全部入栈后再全部出栈,只要符合入栈出栈的规则即可。
2025-10-03 22:30:23
322
原创 链式二叉树--C语言
在这个过程中遇到子节点为空时可以入队列也可以不入队列,不同的选择仅仅对访问队列时的操作不同,如果空节点进队列则访问节点时需要判断如果为空则跳过继续访问下一个节点即可,从操作上来说采用空节点不进队列会更加方便操作。方法同叶子节点个数一样,在返回条件上有所不同,叶子节点满足左右节点都为空的条件,所以返回的是左右叶子节点的数量,而满足左右节点都为空时返回1,为空返回0。判断节点数量采用递归的方式先判断本节点是否为空,为空就代表没有节点返回0,否则返回左节点的递归加右节点的递归再加上本节点的1。
2025-08-28 19:55:19
615
原创 堆的实现--C语言
假设法:这里选择较大的子节点会采用一个假设法来确定较大的子节点,先假设左节点是较大的节点然后左节点与右节点进行比较,如果还是左节点较大则不作任何操作,否则将假设的节点加一变成右节点。向下调整:一般是从修改后的根节点开始,让根节点与子节点中较大的节点进行比较,如果子节点更大就进行交换,然后交换的子节点成为新的父节点进行交换直到父节点大于较大的根节点结点。这里父节点节点下标可传可怖传,一般是根节点下标就是0,但是最后一个有效元素节点下标或者有效元素数量需要传,用来确定循环结束条件。三、堆的具体代码实现。
2025-08-27 19:37:42
487
原创 Linux权限
在拥有者,所属组,other中以拥有者为例,上述文件的权限是rw-,在对应位有该权限用1表示没有权限用0表示,也就是110,二进制表示转化为十进制为6,就是该文件拥有者的权限是6,整体文件拥有者,所属组,other的权限是666.2.如果⽬录没有 -x 权限,则⽆法对⽬录执⾏任何命令,甚⾄⽆法 cd 进⼊⽬, 即使⽬录仍然有 -r 读权限(这个地⽅很容易犯错,认为有读权限就可以进⼊⽬录读取⽬录下的⽂件)3.⽽如果⽬录具有 -x 权限,但没有 -r 权限,则⽤⼾可以执⾏命令,可以 cd 进⼊⽬录。
2025-08-25 17:44:09
750
2
原创 栈的实现--C语言实现
链表:链表可以进行头删尾删、头插尾插,,由于栈的特性,我们对栈的操作都是在同一个方向。尾插尾删中都需要我们遍历整个链表,如果标记尾节点,虽然插入数据不用遍历链表但是删除操作时还需要尾节点前一个的节点,所以综合来说还是比较复杂。数组:数组从下标对每个元素进行管理,在进行插入删除时只用对下标进行++或者--即可,后面将以数组为基本结构实现栈。由于栈的结构特点是后进先出,栈底的元素基本就是不会进行什么操作,进栈和处栈除了最开始基本就是对栈顶操作,在之前了解的结构中只有数组和链表比较合适进行实现栈。
2025-08-24 19:35:02
476
原创 删除链表的倒数第n个节点--力扣
题目要求删除倒数第n个节点因此我们的主要思路就是找到倒数第n+1个节点,很容易就可以想到用快慢指针的方法让快指针先走n个节点然后快慢指针同步走,直到快指针遍历到链表的最后这时慢指针就指向倒数第n+1个节点了。快慢指针的实现有多种方法,但是如果要删除的节点是第一个节点,就是链表刚好就只有n个节点,那就不存在倒数第n+1个节点了,这种情况可以特殊判断,不过就需要每次检查一下是否是第一个节点。这里有一个更好的方法,就是加入一个哨兵节点,这样就可以找到第一个节点前面的节点了。题目:给你一个链表,删除链表的倒数第。
2025-08-23 20:37:24
230
原创 Linux入门命令
2. 当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定的所有⽂件或⽬录复制到此⽬录中。3. 当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源⽂件均移⾄⽬标⽬录中。1. 视mv命令中第⼆个参数类型的不同(是⽬标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其移⾄⼀个新的⽬录中。
2025-08-23 18:34:09
759
1
原创 牛客刷题小练--有序序列合并
然后依次遍历数组,比较元素大小,将较小的元素打印在屏幕,同时该数组下标自加1,与另一个数组元素比较,这里较大的数组下标不会进行自加1,当其中一个数组所有元素遍历完退出循环,然后通过判断两个数组下标确定哪个数组没有打印完,然后循环将剩余的元素全部打印即可。数据范围: 1≤n,m≤1000 1≤n,m≤1000 , 序列中的值满足 0≤val≤30000 0≤val≤30000。输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
2025-08-15 20:52:15
273
原创 类和对象(一)
类是对象进⾏⼀种抽象描述,是⼀个模型⼀样的东西,限定了类有哪些成员变量,这些成员变量只是声明,没有分配空间,⽤类实例化出对象时,才会分配空间。如果嵌套了结构体的情况,嵌套的结构体对⻬到⾃⼰的最⼤对⻬数的整数倍处,结构体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体的对⻬数)的整数倍。编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this指针。类定义了⼀个新的作⽤域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使⽤ :: 作⽤域操作符指明成员属于哪个类域。
2025-08-13 14:13:50
717
原创 C++入门-补充引用部分
引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间,它和它引⽤的变量共⽤同⼀块内存空间。格式:类型& 引⽤别名 = 引⽤对象;int& b = a;return 0;给a取一个别名b,对b进行修改的同时也会对a进行修改。
2025-08-12 14:12:29
769
原创 初识C++
在调⽤该函数时,如果没有指定实参则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以qzx和myqzx中的变量a,b就不影响使用,不会存在C语言中重定义的错误。
2025-08-11 00:11:52
649
原创 单链表的实现(C语言)
每次进行插入时都要申请一个新的节点,进入函数先用malloc开辟一块新的空间空间大小为结构体的大小然后将 新的要插入的数据放在节点的数据部分同时本节点的指向下一个节点的指针指向NULL,最后将指向新节点的指针返回。插入时先开辟一个新的节点,再进行判断如果是空链表则头节点直接指向新开辟的节点,如果部署空链表则需要遍历链表找到尾节点,然后将尾节点的next指针指向新的节点。遍历链表判断每个节点的下一个节点是否为需要的节点,保存下一个节点将新节点插入到遍历到节点的next上,新节点的next指向保存的节点。
2025-07-28 14:03:21
561
原创 图书管理系统(可保存数据)——C语言
程序主题功能仍然是do.....while循环和switch选择实现,但是要实现数据在文件中的存储和读取,在进入do......while循环之前添加一个数据读取函数,将读到的内容存在定义的结构体数组里面,这样原本对文件的操作就转变成对结构体数组的添加查询修改,只需要在最后循环结束后将结构体数组中的数据进行一次储存,下次在打开程序是将里面的数据进行读取就能实现对数据的存储。排序采用的冒泡法不在过多解释,如果大家有更好的排序方式,还请告知!统计的是书库书的总数,通过循环将所有的库存相加即可。
2025-06-10 19:22:40
921
原创 C语言实现初阶扫雷游戏
打印行数,棋盘打印从数组下标为1开始到下标9结束可以将初始化棋盘的中心打印出来,而最外面一圈不打印。最总打印出9*9棋盘,打印出的棋盘范围也在下表为arr[1][1]到arr[9][9]之间,因此产生的随机数范围在1-9之间,同时要防止产生相同坐标的雷,用if()判断产生的是否已经是雷,每产生一个雷count减1,初始为10,因此可以产生十个雷。存储的棋盘要比最后打印的棋盘大一圈,因此初始化COLS=11,ROWS=11的棋盘分别用mine存放雷show打印棋盘,这里用'0'表示非雷用'1'表示雷。
2025-05-18 23:30:31
978
原创 C语言小笔记----C语言常见概念
1.\0 是字符串的结束标志,如我们见到的“abcdef”实际上在末尾还有一个\0。打印字符串时碰见\0就结束了,如果在中间放一个\0就会让打印的字符串提前结束。\0 :null 字符,代表没有内容,\0 就是\ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其 ASCII码值是0。\t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个4/8的倍数。\v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。如: \x30 表⽰字符0。\\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。
2025-05-14 23:44:43
952
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅