- 博客(297)
- 收藏
- 关注

原创 【初阶数据结构与算法】第十篇——八大排序算法(头脑风暴逻辑分析+动图详解一看就会+代码分析信手捏来)
💬**作者介绍:**自动化,大水生一枚,希望可以一起进步!🏆个人主页:企鹅不叫的博客 🌈专栏C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C++初阶和进阶⭐️ 博主码云gitee链接:代码仓库地址⚡若有帮助可以【关注+点赞+收藏】,大家一起进步!https://gitee.com/royal-never-give-up)💙系列文章💙【初阶数据结构与算法】第一篇:算法中的时间复杂度和空间复杂度【初阶数据结构与算法】第二篇:顺序表【初阶数据结构与算法】
2023-10-21 23:12:17
2063
53

原创 【初阶与进阶C++详解】第一篇:C++入门知识必备
⭐️本篇博客我要给大家分享一下C++入门知识。希望对大家有所帮助。⭐️ 博主码云gitee链接:码云主页前言💎一、C++关键字🧡C++又新增了31个关键字,一共63个关键字💎二、命名空间🧡在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的,....
2022-04-07 13:40:46
2197
37
原创 【项目】C++云备份-包含运行教程
/切换rootsu -//打开文件//找到下面root,添加用户aaa//添加完后用ctrl+x,再按y,再按回车//依次升级//升级完,检查下是不是gcc version 7.3.1版本g++ -vgcc -v注意:升级不了看这里:https://www.cnblogs.com/Jedi-Pz/p/18447117/* 文件所在设备的 ID *//* 文件的 inode 编号 *//* 文件的类型和权限 *//* 文件的硬链接数 *//* 文件所有者的用户 ID */
2025-04-03 14:47:47
636
原创 【项目】C++同步异步日志系统-包含运行教程
支持多级别的日志消息:不同的日志有不同的优先级支持同步日志和异步日志支持写入日志到控制台,文件和滚动文件中:当文件写到一定体积后,新的内容写到别的文件中支持多线程程序并发写日志支持扩展不同的日志存放位置//使用// 查找字符串 \"lo\" 中任意字符最后一次出现在位置查找字符c最后一次出现的位置,或者字符串 str 中包含的任意字符最后出现位置不指定pos,则默认从后往前搜索找到返回最后一次出现的位置,没找到返回nposmkdir。
2025-03-25 09:38:47
1081
原创 六、动规_两个数组的dp
设dp[i][j]表示字符串s的前i个字符和模式p的前j个字符是否能匹配,dp[i][j]为true表示可以匹配,false表示不能匹配。其中i取值范围是0到s.length()j取值范围是0到p.length()。
2025-03-14 16:35:41
929
原创 五、动规_回文串系列
对于每个子串,先判断其首尾字符是否相等,若相等,再根据子串长度分情况处理:当子串只有一个字符时,肯定是回文串;数组后,为了找出是否存在一种分割方式能将字符串分割成三个满足条件的回文子串,代码通过另外两层嵌套循环遍历所有可能的分割点。三是当子串长度大于 2 时,需要判断去掉首尾字符后的中间子串是否为回文串,若中间子串对应的。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。等于 1 时,表明子串有两个字符且这两个字符相等,该子串也是回文串,同样将。的子串是否为回文串。
2025-03-13 16:23:14
682
原创 四、动规_子序列系列
*子序列 **是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从。中删掉任意数量的元素(也可以不删),而不改变其余元素的顺序。数组中的子序列是从数组中删除一些元素(也可能不删除)得到的一个序列。中最长的斐波那契式的子序列的长度。中最长等差子序列的长度,该子序列中相邻元素之间的差等于。个元素结尾的最长递增子序列的长度。
2025-02-23 13:36:31
631
原创 三、动规_子数组系列
让跨越首尾的子数组和最大,就需要让补集的和最小,补集就是不跨越首尾的最小子数组的和。处理乘积问题时,由于负数的存在,一个负数可能会把当前的最小乘积变成最大乘积,所以我们需要同时记录以每个位置结尾的最大乘积和最小乘积。,请你找出数组中乘积最大的非空连续 子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。当三个元素只满足“大 - 小 - 大”或者“小 - 大 - 小”中的一半时,例如,数组。返回跨越首尾的最大子数组的和,不跨越首尾的最大子数组的和两个当中最大值。个字符结尾的连续子串的长度。
2025-02-21 21:05:00
861
原创 二、动规_简单多状态dp问题_买卖股票系列问题
定义两个二维数组buy和sellbuy[i][j]:表示在第i天结束时,恰好进行了j笔交易且当前持有股票的最大利润。sell[i][j]:表示在第i天结束时,恰好进行了j笔交易且当前不持有股票的最大利润。
2025-02-21 15:31:24
746
原创 一、动规_斐波那契数列模型_路径问题
dp[m] [n]`是终点,由于在[1,1]这个位置也需要由上一步得到当前的路径数,显然我们是从[1,1]开始的,那么路径是就是1,那么只需要将dp [0] [1]或者dp[1] [0]任意一个位置设置成1即可满足条件。的最小花费,到达 i 位置是从 i-1 位置或者 i-2 位置开始,所以是先到达 i-1 位置,然后支付cos[i-1]走一步,或者先到达 i-2 位置,然后支付cos[i-2]走两步。dp[ i ]表示第 i 个T表示的数字,初始化 dp[0]=0,dp[1] = dp[2]=1。
2025-02-21 11:36:15
653
原创 BFS-FloodFill 算法 解决最短路问题 多源 解决拓扑排序
且未被访问过,就将该相邻位置的坐标加入队列,并标记为已访问。**输入:**board = [[“X”,“X”,“X”,“X”],[“X”,“O”,“O”,“X”],[“X”,“X”,“O”,“X”],[“X”,“O”,“X”,“X”]]输出:[[“X”,“X”,“X”,“X”],[“X”,“X”,“X”,“X”],[“X”,“X”,“X”,“X”],[“X”,“O”,“X”,“X”]]上面图是输出图,0是水,题目中的数值可以转化成,走几步找到最近的水源,也可以理解成,从水源出发,走几步可以遍历所有的陆地。
2025-02-17 20:24:10
962
原创 LCR 160. 数据流中的中位数
*中位数 **是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。数组是空直接插入,不是空就扩容然后往后移,而。方法则根据数组元素数量的奇偶性计算中位数。
2025-02-13 19:38:06
207
原创 692. 前K个高频单词
返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,2、定义优先级队列并指定排序规则,构建大根堆。个出现次数最多的单词。
2025-02-13 19:37:42
302
原创 703. 数据流中的第 K 大元素
大元素,重复的也算,构造时将数据传入到小堆中,add时保证小堆中只有 K 个元素,这 K 个元素就是最大的 K 个,而这个小堆中最小的是堆顶。个,就将堆顶元素(即当前最小的元素)移除。个元素,移除最小的元素不会影响第。
2025-02-13 19:23:10
270
原创 1046. 最后一块石头的重量
每一回合,从中选出两块** 最重的** 石头,然后将它们一起粉碎。假设石头的重量分别为。最后,最多只会剩下一块石头。如果没有石头剩下,就返回。:向队列中插入一个元素,插入后堆会自动调整以保持优先级顺序。:删除队列中的堆顶元素(优先级最高的元素),堆会重新调整。:返回队列中的堆顶元素(优先级最高的元素),但不删除它。有一堆石头,每块石头的重量都是正整数。:判断队列是否为空,如果为空返回。:返回队列中元素的数量。
2025-02-13 19:22:40
165
原创 662. 二叉树最大宽度
被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些延伸到这一层的。层序遍历,把树的值改成下标,对于每个节点,将其从队列中取出,如果该节点有左子节点,计算左子节点的。值的 2 倍加 1)并加入队列;如果有右子节点,计算右子节点的。类型转换来避免在计算位置编号时可能出现的整数溢出问题。值的 2 倍加 2)并加入队列。题目数据保证答案将会在。给你一棵二叉树的根节点。
2025-02-13 11:38:48
413
原创 429. N 叉树的层序遍历
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
2025-02-13 11:37:15
172
原创 429. N 叉树的层序遍历
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
2025-02-12 17:34:16
164
原创 946. 验证栈序列
数组的下一个元素,同时弹出栈顶元素,模拟出栈操作。这个过程会持续进行,直到栈为空或者栈顶元素不等于。,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回。:在每次入栈操作之后,检查栈是否为空以及栈顶元素是否等于。如果满足条件,说明此时可以进行出栈操作,将。数组后,检查栈是否为空。如果栈为空,说明所有元素都按照。数组的顺序正确出栈,即这是一个有效的栈操作序列,返回。数组,将数组中的元素依次压入栈。两个序列,每个序列中的。中,模拟元素的入栈过程。
2025-02-12 17:09:59
381
原创 394. 字符串解码
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。给定一个经过编码的字符串,返回它解码后的字符串。,表示其中方括号内部的。
2025-02-12 17:09:14
302
原创 227. 基本计算器 II
注意:处理多位数字的情况,体现在选择 stack 使用 int 不是 char。同时注意运算符优先级的问题。**注意:**不允许使用任何将字符串作为数学表达式计算的内置函数,比如。对于字符串中的每个字符,首先检查是否为数字。如果是数字,将其累加到。你可以假设给定的表达式总是有效的。,请你实现一个基本计算器来计算并返回它的值。中,通过乘以 10 处理多位数字的情况。重置为 0,准备处理下一个数字。整数除法仅保留整数部分。给你一个字符串表达式。
2025-02-12 17:08:24
426
原创 844. 比较含退格的字符串
两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回。**注意:**如果对空文本输入退格字符,文本继续为空。
2025-02-12 17:07:54
239
原创 1047. 删除字符串中的所有相邻重复项
我们定义一个栈,之后遍历字符串,当栈为空直接插入字符,如果栈不为空就查看栈顶元素,如果和遍历元素一样就删除,否则插入元素,遍历完成后将栈中剩余元素转换为字符串。在完成所有重复项删除操作后返回最终的字符串。上反复执行重复项删除操作,直到无法继续删除。会选择两个相邻且相同的字母,并删除它们。给出由小写字母组成的字符串。
2025-02-12 17:07:19
147
原创 43. 字符串相乘
result(num1.size() + num2.size(), 0):两个长度分别为。**注意:**不能使用任何内置的 BigInteger 库或直接将输入转换为整数。是将字符类型的数字转换为整数类型。的乘积,它们的乘积也表示为字符串形式。,所以这里预留足够的空间来存储最终结果。给定两个以字符串形式表示的非负整数。的数字相乘,结果的长度最大为。位相乘时,乘积的个位应该放在。取和的个位作为当前位置的结果,将和的十位(即进位)累加到。是连续的,所以用字符减去。的每一位,内层循环遍历。就可以得到对应的整数。
2025-02-11 18:39:35
283
原创 67. 二进制求和
对 2 取余得到当前位的值(因为是二进制加法,结果只能是 0 或 1),并将其转换为字符添加到结果字符串。还有未处理的位,或者存在进位,就继续进行加法运算。除以 2 得到新的进位,用于下一轮的加法运算。,以二进制字符串的形式返回它们的和。循环进行逐位相加,循环条件为。给你两个二进制字符串。,这意味着只要字符串。计算当前位的结果,将。
2025-02-11 18:39:04
301
原创 14. 最长公共前缀
纵向比较,用第一个字符串作为第一层循环,从第一个字符串的一个字符开始,纵向比较 flower,f就都比较f,之后再比较 l ,以此类推。编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串。
2025-02-11 18:38:03
188
原创 49. 字母异位词分组
排序后的字符串当作键,把所有与这个排序后字符串对应的字母异位词存放在一个字符串向量里作为值。是由重新排列源单词的所有字母得到的一个新单词。为键的字符串向量,如果这个键还不存在,使用。可以按任意顺序返回结果列表。题目意思:把字母数量相同的字符串分到一组。给你一个字符串数组,请你将。添加到这个字符串向量中。
2025-02-11 11:48:54
157
原创 219. 存在重复元素 II
注意,这里哈希记录的是,数字和下表,不是数字和数字出现次数。和该元素上次出现的索引之间的距离。,那就说明找到了符合条件的重复元素,函数直接返回。中,或者存在但距离不满足条件,就把当前元素。中,以此更新该元素的最后一次出现的索引。,判断数组中是否存在两个。要是存在,就计算当前索引。中是否已经存在当前元素。
2025-02-11 11:48:23
139
原创 217. 存在重复元素
用哈希表记录,如果是遇到重复就返回true,没有遇到重复就将其插入到哈希表中,循环结束代表没有找到重复数字,返回false。输入:nums = [1,1,1,3,3,4,3,2,4,2]如果数组中每个元素互不相同,返回。输入:nums = [1,2,3,1]输入:nums = [1,2,3,4]元素 1 在下标 0 和 3 出现。如果任一值在数组中出现。
2025-02-11 11:47:52
189
原创 面试题 01.02. 判定是否互为字符重排
请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。给定两个由小写字母组成的字符串。判断两个哈希表是否一样。
2025-02-11 11:47:22
207
原创 1. 两数之和
使用一个哈希表(HashMap)来存储数组元素及其对应的索引。遍历数组,对于每个元素 nums[i],计算 complement = target - nums[i]。检查哈希表中是否存在 complement: 如果存在,说明找到了两个元素的和等于 target,返回它们的索引。如果不存在,将 nums[i] 及其索引 i 存储到哈希表中。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。,请你在该数组中找出 **和为目标值 **整数,并返回它们的数组下标。你可以按任意顺序返回答案。
2025-02-11 11:46:51
163
原创 K 个一组翻转链表
这一步操作可以避免在处理头节点反转时需要额外考虑特殊情况,使得后续的操作更加统一。是一个正整数,它的值小于或等于链表的长度。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。个节点的尾节点,继续处理后续的节点,直到遍历完整个链表。函数完成一组节点的反转后,会检查其返回值。的整数倍,那么请将最后剩余的节点保持原有顺序。个节点一组进行翻转,请你返回修改后的链表。从虚拟头节点开始,在链表中不断寻找每。对于每一组节点,调用。函数里,创建一个虚拟头节点。指针指向原链表的头节点。,说明剩余节点数量不足。
2025-02-11 11:46:00
908
原创 23. 合并 K 个升序链表
请你将所有链表合并到一个升序链表中,返回合并后的链表。暴力解法:链表转数组→合并数组→排序数组→数组转链表。给你一个链表数组,每个链表都已经按升序排列。
2025-02-11 11:45:17
401
原创 143. 重排链表
将前半部分链表和反转后的后半部分链表依次合并,每次从前半部分链表取一个节点,再从后半部分链表取一个节点,交替连接,直到其中一个链表遍历完。,遍历后半部分链表,将每个节点依次插入到虚拟头节点之后,实现链表的反转。当快指针到达链表末尾时,慢指针刚好指向链表的中间节点。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。:将链表从中间节点处分割成两部分,前半部分链表的头节点为。用快慢指针找到终点,断开,后半段反转然后拼接。:使用快慢指针法,慢指针。,后半部分链表的头节点为。:创建一个虚拟头节点。
2025-02-11 11:44:46
382
原创 2. 两数相加
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。从链表头开始逐位相加,处理进位,最终得到相加结果的链表。的链表,表示两个非负的整数。它们每位数字都是按照。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。
2025-02-11 11:42:44
216
原创 493. 翻转对
在合并的过程中,我们比较左右子数组的元素大小,将较小的元素依次放入临时数组中,直到左右子数组的元素都处理完。最后,把临时数组中的元素复制回原数组。在合并左右子数组之前,我们需要找出那些一个元素在左子数组,另一个元素在右子数组的翻转对。具体做法是,使用两个指针分别遍历左右子数组,如果左子数组的当前元素。构成翻转对,我们把这些翻转对的数量累加到总的计数中,然后右子数组的指针。分治过程中,我们可以顺便统计翻转对的数量,统计跨越左右子数组的翻转对。你需要返回给定数组中的重要翻转对的数量。大于右子数组当前元素。
2025-02-09 19:23:19
259
空空如也
删除自己创建的社区,删除社区
2023-01-15
阿里云+picgo图床,外链失效
2022-10-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人