- 博客(123)
- 收藏
- 关注
原创 递归-二叉树中的深搜-257.二叉树的所有路径-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析二、算法原理解法:递归+前序遍历根据我们的模拟和前序遍历,我们开始编写递归代码1、重复的子问题--设计函数头2、某一个子问题做了什么--设计函数体3、递归出口4、回溯5、细节问题在前面我们简单接触和认识了剪枝,今天又来了位新朋友回溯,在未来的学习中会逐步加深它们俩的概念。根据上面的模拟和递归函数的设计,自己尝试编写代码,提升自己
2025-11-20 20:05:16
580
原创 递归-二叉树中的深搜-230.二叉搜索树中第k小的元素-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析二、算法原理解法:递归+中序遍历结合上面的性质、第k小的判断、模拟过程开始编写递归函数1、重复的子问题--设计函数头2、 某一个子问题做什么--设计函数体3、递归出口4、剪枝5、全局变量prev初值的设计根据上面的模拟过程结合编写递归函数的几大步骤,可以自己尝试编写代码,提升自己的代码能力,题目链接如下:230. 二叉搜索树中第
2025-11-20 20:04:46
746
原创 递归-二叉树的深搜-98.验证二叉搜索树-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析二、算法原理解法:递归+中序遍历根据模拟步骤和二叉搜索树的性质编写递归函数1、相同的子问题--设计函数头2、某一个子问题做了什么--设计函数体3、递归出口4、细节问题根据自己的想法和上面的原理,先自己尝试编写代码,提升自己的代码能力,题目链接如下:三、代码示例解法:递归+中序遍历四、递归展开图看到最后,如果对您有所帮助,还请点赞
2025-11-18 19:37:59
706
1
原创 递归-二叉树中的剪枝-814.二叉树剪枝-力扣(LeetCode)
个人主页 :1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析二、算法原理解法:递归1、重复的子问题--设计函数头2、只关心某一个子问题做什么--设计函数体3、递归出口细节:根据上面的分析结合自己的思路,先去尝试编写代码,多动手敲代码才能有效提高自己的代码水平。题目链接如下:814. 二叉树剪枝 - 力扣(LeetCode)三、代码示例四、递归展开图看到最后,如果对您有所帮助,还请点赞、
2025-11-18 19:37:20
799
10
原创 递归-二叉树数中的深搜-129.求根节点到叶节点数字之和-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析1、树中节点的数目在范围 [1, 1000] 内2、0 <= Node.val <= 93、树的深度不超过 10二、算法原理解法:递归1、相同的子问题--设计函数头2、只关心某一个子问题做什么--设计函数体2.1、首先需要根据前面节点的路径和计算当前节点的路径和,用于下一层的参数传递2.2、将计算的当前路径和nps传递给node
2025-11-17 22:43:02
631
6
原创 Linux(6)| 全栈开发工具链:从vim、gcc到git与Makefile的实战修炼指南
在Linux下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但是这样太麻烦了,于是就有人把一些常用的软件提前编译好,做成软件包(可以理解为windows上的安装程序)放到一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装。软件包和软件包管理器之间的关系可以类比“APP”和“应用商店”的关系。安装方式核心特点适用场景源代码安装手动编译,可自定义配置需要定制功能、安装最新测试版软件rpm安装预编译包,需手动解决依赖。
2025-11-17 22:42:11
1519
5
原创 递归-二叉树中的深搜-2331.计算布尔二叉树的值-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析1、非叶子节点要么值为2代表||,要么值为3代表&&2、叶子节点要么值为1代表true,要么值为0代表false3、该二叉树属于完全二叉树,即只有2个或0个孩子节点4、计算根据非叶子节点代表的逻辑运算符对叶子节点进行逻辑运算二、算法原理解法:递归角度1:以宏观看待递归如何编写递归代码?1、重复子问题-设计函数头2、只关心某一个子
2025-10-20 23:16:32
1284
2
原创 递归-50.Pow(x,n)-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析二、算法原理解法1:暴力循环->时间复杂度:超时解法2:快速幂->时间复杂度:O(log n)如何编写递归代码?1、重复子问题->函数头2、只关心某一个子问题做什么->函数体3、递归函数的出口细节问题1、观察题目条件可知n有正也有负2、n次方数的负数转正可能会溢出根据编写思路和细节问题,去编写尝试代码,提升自己的代码能力,题目链
2025-10-19 21:13:01
1176
1
原创 入驻腾旭云
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?
2025-10-18 16:54:02
166
3
原创 递归-24.两两交换链表中的节点-力扣(LeetCode)
我们的重复子问题就是将链表两两交换,需要一个ListNode*的参数,由于需要返回新的头指针,所以返回值类型是ListNode*。所以题目提供的函数可以拿过来用。
2025-10-18 16:30:41
935
9
原创 递归-206.反转链表-力扣(LeetCode)
链表可以看作一棵特殊的树,将横着摆放的链表竖直摆放,此时再看就有点树的感觉了。后序遍历是一种二叉树的遍历方法,即先左子树、右子树、根的顺序遍历二叉树,与其相似的还有前序遍历和中序遍历,它们的区别在于根访问的位置,第一个就访问的根就是前序遍历,在中间就是中序遍历,在最后就是后序遍历。接下来看一看具体过程。我们的重复子问题是,将当前节点后面的链表反转,所以需要一个ListNode*类型的变量。由于我们还需要返回新的头指针,所以返回值类型也是ListNode*。题目给我们提供的函数就可以拿过来直接用。
2025-10-18 14:46:51
1101
13
原创 递归-21.合并两个有序链表-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析1、合并两个有序链表2、新链表节点是由给定两个链表拼接而成的二、算法原理解法:递归如何写递归代码?1、重复的子问题->函数头设计2、只关心某一个子问题做什么->设计函数体3、递归的出口对于链表类的题,还是建议多画图,去体会链接的过程,题目链接放在下面,可以去动手敲敲三、代码示例四、递归展开图看到最后,如果对您有所帮助,还请点赞、
2025-10-16 23:42:27
1257
7
原创 递归-面试题08.06.汉诺塔问题-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析1、每次只能移动一个盘子2、盘子只能从柱子顶端滑出移到下一根柱子3、盘子只能叠在比它大的盘子上4、不能额外开空间,也就是空间复杂要求O(1)二、算法原理解法:递归我们通过分析可以发现,在解决大问题的过程中,我们发现了相同类型的子问题,在解决子问题的过程中,我们又发现了相同类型的子问题如何编写递归代码?1、通过重复的子问题,我们可
2025-10-16 22:11:00
862
9
原创 并查集-547.省份的数量-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析1、省份是一组直接或间接相连的城市(没有链接的单独城市也是省份)2、isConnected[i][j]== 1 or 0,并且isConnected[i][j] == isConnected[j][i]二、算法原理解法1:自己造轮子(写一个并查集出来)具体步骤:1、将自己写好的并查集直接复制粘贴过来2、通过size()获取城市的
2025-10-15 18:24:39
792
7
原创 优先级队列(堆)-295.数据流的中位数-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析1、-105 <= num <= 1052、在调用 findMedian 之前,数据结构中至少有一个元素3、最多 5 * 104 次调用 addNum 和 findMedian二、算法原理解法1:排序直接用sort解法2:借助插入排序的思想解法3:利用大根堆和小根堆维护数据具体过程:三、代码示例解法3:看到最后,如果对您有所帮助
2025-10-14 22:59:19
938
5
原创 高阶数据结构-并查集
回顾全文,并查集作为处理 “动态连通性” 问题的经典数据结构,其核心魅力在于用极简的数组模拟森林,通过高效操作实现集合的管理与查询。从原理上看,它以 “双亲表示法” 为基础 —— 初始时每个元素自成集合(数组值为 - 1),根节点的负数值绝对值代表集合大小,非根节点的正数值指向父节点,清晰构建了元素间的从属关系;就像文中 10 名新员工从 “各自为营” 到 “按地域组队”,再到 “跨队合并” 的过程,生动体现了并查集 “从森林到单树(或少数树)” 的演变逻辑。。
2025-10-14 22:58:36
823
4
原创 Linux (5)| 入门进阶:Linux 权限管理的基础规则与实践
举个例子,公司有一个项目,需要你张三等程序员去完成,你们被分为了不同小组,你张三等人分到了A组,李四等人分到了B组。假如我们只有拥有者,那么每个人都是独立的,无法协同工作。所以便有了所属组,我们一个组的人可以在一起协助开发了。一天B组的李四想要来看看你们的工作进度,但由于你们不是一个所属组的,李四没有权限查看你们的文件。但是在李四走后,你的领导王五来查看你们的工作进度,此时给领导所属组的权限,他就能查看了。
2025-10-13 16:42:38
2102
22
原创 优先级队列(堆)-703.数据流中的最大值-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客目录一、题目解析1、调用add会返回当前第K大元素2、add只会调用10^4次二、算法原理在讲解法之前,先有一个问题,该题用大根堆还是小根堆呢?结论:该用小根堆为什么要用小根堆?结论:小根堆的性质能以O(1)的效率执行add操作解法:优先级队列(小根堆)具体步骤:三、代码示例看到最后,如果对您有所帮助,还请点赞、收藏和关注一键三连,在未来还会继续带来优秀的内容,感谢观看,我们下期再见!一、题目解析在我们学习堆这个数据结
2025-10-13 16:42:08
617
7
原创 优先级队列(堆)-1046.最后一块砖的重量-力扣(LeetCode)
个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析1、选出两块最重的石头意为第一重和第二重或同样重2、如果只剩一块石头,返回石头的重量;如果没有石头返回0二、算法原理解法:优先级队列解法步骤:三、代码示例一、题目解析优先级队列就是堆,而堆又有大根堆和小根堆,本题需要用到的就是大根堆这里模板参数Compare的缺省值为less,也就是按照从根往下,根比孩子大;而小根堆则是grea
2025-09-28 21:45:36
1043
9
原创 队列+宽搜(BFS)-515.在每个树行中找最大值-力扣(LeetCode)
具体过程:1、先创建queue队列存储节点的指针,一个vector用于存储最大值2、入根,如果为空则直接返回vector,不为空则入根到队列中3、循环进行层序遍历 1、统计队列中的元素个数,该个数为层序遍历的次数 2、定义一个变量并赋值MIN_INT,因为val的范围[-2^31,2^31-1] 3、开始层序遍历,取队头元素,判断其val是否大于记录最大值变量 4、入孩子 5、层序遍历结束后,将最大值加入到vector中4、返回vecto
2025-09-28 16:51:50
554
6
原创 队列+宽搜(BFS)-103.二叉树的锯齿形层序遍历-力扣(LeetCode)
这个标记位可以是bool or int,这个看自己选择了这里用int当作标记位1、创建一个队列和二位数组2、记标记位1,判断根是否为空,然后入队列3、循环层序遍历之前,先记录此时队列中的元素个数,该个数为层序遍历循环数4、通过front()取出队头元素,然后pop()掉,判断左右是否为空,不为空则将数据加入到一维数组中,循环结束后判断标记位奇偶,奇则将一维数组加入到二维数组中;偶则将一维数组逆置后,加入到二维数组5、最后返回二维数组(二维数组应在入根前创建,如果root为空,也可以直接返回二维数组)详细可以
2025-09-26 23:19:48
509
4
原创 队列+宽搜(BFS)-662.二叉树最大宽度-力扣(LeetCode)
在遇到第一个非空节点后,开始统计nullptr的数目,在遇到下一个非空节点时,返回结果存在着某个测试样式,将3000个节点左右均分,所以此时最后一层的节点树大概有2^1497个这么多但我们在学习二叉树的时候,简单模拟是通过数组实现的,可以通过给节点编号,将节点存储在数组中,所以便有了解法2。
2025-09-25 21:59:54
1076
7
原创 栈-946.验证栈序列-力扣(LeetCode)
相信大多数读者在学习栈这个数据结构时,肯定接触过类似的题目:判断下面序列能通过push和pop得到?而今天这道题就是把我们平时做题时在纸上或者在大脑中推演的过程用代码实现,并判断这里不一定要用栈来实现,这里可以用vector来实现一个简单的栈,通过vector的back()达到栈的top()的效果想了解更多相关知识,可以自行访问查询链接:cplusplus.com - The C++ Resources Networkvector模拟取反是因为,返回的是size(),如果为空,则size=0,0为false
2025-09-18 21:56:02
653
16
原创 栈-394.字符串解码-力扣(LeetCode)
一个数字栈,一个字符串栈,细节:为了防止越界访问,在字符串栈中先加入一个空串对于数字,[、]和没有编码的字符串,需要分情况讨论通过一个变量tmp记录每一位,如果下一位仍是数字,则tmp*10+s[i]-'0',将原本的个位变为十位,依次这样操作,把数字提取出来借助一个临时的string变量记录字符串top出数字栈和字符串栈的元素,按照规则进行解码和提取字符串相同思路
2025-09-18 21:12:04
481
12
原创 栈-227.基本计算器II-力扣(LeetCode)
一个栈用于存储数字,一个栈用于存储运算符,当两个栈都为空的时候,得到最终结果;为了出现字符栈已空,而数字栈未空,可以先在字符栈内加入‘+’,或者最后特殊他处理中缀表达式就是类似题目所提供的字符串“3+2*2”," 2+3 / 5"," 2-4*5"等等,后缀表达式则是将运算按优先级排序"3 + 2 2 * ","2 + 3 5 / ","2 - 4 5 * "等等,如果有机会后面会详细讲解一下这里的优化只是一个小优化,由题可知只有'+','-','*','/'这四个运算符,我们可以知道优先级,所以故将字符栈
2025-09-15 23:09:25
518
13
原创 栈-844.比较含退格的字符串-力扣(LeetCode)
通过string简单模拟栈,得到的结果不需要额外转换对于即将加入的元素是‘#’,我们对字符串pop_back(),尾删处理有需要可以自行查询相关语法细节链接:cplusplus.com - The C++ Resources Network细节:题目上给出了空串遇到‘#’的处理,结果仍然为空,所以我们在判断删除或加入字符串之前需要特殊处理一下
2025-09-12 12:14:14
369
10
原创 栈-1047.删除字符串中的所有相邻重复项-力扣(LeetCode)
该题并不难,难的是能不能想到用栈这个数据结构解题横着看起来不好理解,我们把它竖起来,是不是和消消乐很类似,两两消去,上的会往下掉;这样的结构很难不往栈方面去想但是我们没有必要使用库里的栈,第一点,栈中存储的是字符,我们得到最终结果之前,还需要把栈内的元素还原成字符串;第二点在我们早期学习时,或许不少读者都用c实现过链表、栈和队列,这样简单的数据结构,简单的栈是可以用数组模拟的,由于需要返回string,所以这里可以使用string来模拟栈的功能当即将加入ret的元素与ret末尾元素相同,根据重复项删除,我们
2025-09-12 11:42:09
543
9
原创 字符串-43.字符串相乘-力扣(LeetCode)
为了方便字符串计算,我们将其逆置,符合我们的计算需求,"123"将变为"321"但还是有细节需要注意我们自己在计算时,不加0,是因为我们知道哪里是有0的,只是懒得写。但对于我们计算字符串相加时,不加0,会导致计算出错,所以要补上0在计算123x0的时候,由于我们对字符串进行处理,所以会出现"000"这样的结果,所以需要特殊处理一下我们逆序了相乘的字符串,但我们计算的结果也是逆序的,所以我们需要对结果进行逆置对于解法1,我们需要处理多次进位,计算123*6,123*50,123*400的时候需要处理进位,在计
2025-09-11 20:07:20
416
1
原创 字符串-14.最长公共前缀-力扣(LeetCode)
需要注意只有一个元素且只有一个字符,直接返回strs[0]思路很简单,但难在将思路转化成代码,可以自己动手尝试一下链接:14. 最长公共前缀 - 力扣(LeetCode)
2025-09-09 22:22:32
319
1
原创 Linux(3)|入门的开始:Linux基本指令(3)
到这里,我们已经系统梳理了 Linux 中指令的本质、输入输出重定向的原理,以及 cat、more、less、head、tail 等核心文件查看指令的用法。回顾整个学习过程,其实贯穿始终的是两个关键逻辑:其一,指令的本质是可执行程序。无论是系统自带的 gcc、ls,还是我们自己用 C 语言编译的 a.out,本质上都是存放在特定路径下的可执行文件。
2025-09-09 22:00:28
1553
13
原创 哈希表-49.字母异位词分组-力扣(LeetCode)
与其是一道算法题,这道题更像语法题将字符串排序即可创建一个<string,vector<string>>的哈希表,前一个string是排列好的string,后面的vector<string>中存储的是分好的字母异位词通过创建一个vector<vector<string>> vv,用于存储分组,由于哈希表中存的是一个一个的pair, 插入second即可
2025-09-08 23:35:54
424
2
原创 哈希表-219.存在重复元素II-力扣(LeetCode)
与该题解法类似哈希表-1.两数之和-力扣(LeetCode)-CSDN博客,只不过多了一个下标差的判断。这里有一个小细节不容忽视,当哈希表中已存在查询元素时,在下标差比较后,不满足<=k,此时是否覆盖哈希表中的元素,更新下标呢?结果是肯定的,为了满足<=k的条件,肯定是越近的越好,所以离得远的可以直接覆盖
2025-09-04 22:03:01
302
15
原创 哈希表-271.存在重复元素-力扣(LeetCode)
解法类似哈希表-1.两数之和-力扣(LeetCode)-CSDN博客,但比它还要简单对于是否存在相同元素,我们依次固定元素,并在哈希表中查找是否存在对应元素,如果存在,则遇到重复元素,直接返回false;反之不存在,把元素用insert插入到哈希表中。与两数之和不同的是,我们不需要存储元素的下标,所以使用unordered_set即可
2025-09-03 21:42:51
284
3
原创 Linux(2)|入门的开始:Linux基本指令(2)
total 4total 8total 4可以看到test和data文件复制到了test1目录下total 8total 4因为上一个目录下,没有test2目录的存在,所以弹出报错信息到这里,我们已经完整掌握了 Linux 中与 “删除 - 查询 - 复制 - 移动” 相关的核心指令:从只能删除空目录的rmdir,到功能强大但需谨慎使用的rm(尤其警惕rm -rf /);从能匹配各类文件的*通配符,到帮我们随时查手册的man;
2025-09-03 19:55:05
964
12
原创 哈希表-面试题01.02.判定是否互为字符重排-力扣(LeetCode)
使用容器unordered_map显然过于笨重,我们可以注意到题目的字眼,小写字母,我们可以转而使用大小为26的数组模拟哈希表分别统计s1和s2,然后循环比对,只要不相等就可以返回false,全部相同才为true在统计s1或s2的基础上,统计s1或s2,统计前一个是加法,后一个做减法,并判断当<0,则返回false
2025-09-02 22:05:08
658
8
原创 哈希表-1.两数之和-力扣(LeetCode)
时光荏苒,博主也是再次来到leetcode的起点了,今天的我早已不是过去的我,回归正题接下来开始我们的算法之旅吧ps.这是博主在今年1月17日,提交的代码,那时博主还很小白我们需要频繁的查找某一个元素,用哈希表可以达到O(1)的查找根据题目的需求,我们的哈希表中要存储<nums[i],i>,这里的i是对应的下标;在遍历元素时,先固定一个值nums[i],然后在哈希表中找target-nums[i],如果存在,则返回{hash[target-nums[i],i},如果不存在,则把nums[i]和i插入到
2025-09-01 22:24:41
579
12
原创 Linux(1)|入门的开始:Linux基本指令
摘要: 本文系统介绍了操作系统的基础概念与Linux核心指令。操作系统作为软硬件管理的中间层,核心标准是稳定、高效、安全。Linux采用多叉树目录结构,通过路径(绝对/相对)定位文件。重点讲解了基础指令:ls查看目录内容(含-l、-a等选项)、pwd显示当前路径、cd切换目录、touch创建文件、mkdir建立目录(-p可递归创建)。操作本质是对多叉树的增删查改,而.和..分别表示当前目录与上级目录。掌握这些指令是Linux操作的基础,建议通过实践巩固记忆,为后续深入学习铺垫。
2025-08-30 23:21:23
1142
16
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅