- 博客(26)
- 收藏
- 关注
原创 蓝桥杯抱佛脚第一天|简单模拟,set,map的使用
set是 C++ STL 中的有序集合容器:元素自动从小到大排序元素唯一,不能重复底层通常用红黑树实现,插入、删除、查找都是O(log n)
2026-03-16 21:42:18
471
原创 代码随想录算法训练营第十九天| 动态规划理论基础,509.斐波那契数,70.爬楼梯,746.使用最小花费爬楼梯
动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。1.理解题目意思,搞清楚这道题可以用哪种方式来解决。2.动态规划五部曲来分析解决问题。3.注意一些细节问题。
2026-03-10 16:09:47
349
原创 代码随想录算法训练营第十八天| 491.非递减子序列,46.全排列,47.子集||
1.搞清楚题意,虽然也是集合问题,但是和前面的题目有什么不同?不同在于它无法提前对数组元素进行排序在进行递归。2.回溯三部曲,主要是收集最后结果以及单层搜索逻辑,怎么写。3.一些细节部分。1.搞懂题意,排列问题的特点和要点是什么。一在于最后结果是收集叶子节点,二在于每一种排列是nums的大小,即树的宽度就不需要startIndex来控制了。2.回溯三部曲,终止条件的选取,单层搜索逻辑。它需要一个used数组来记录这个元素有没有使用过,如果这个元素使用过就跳过,选择下一个元素。
2026-03-06 16:35:54
386
原创 代码随想录算法训练营第十七天| 93.复原IP地址,78.子集,90.子集||
1.搞懂题意,对最后要达到的要求进行分解。2.回溯三部曲,参数,终止条件,单层搜索逻辑。3.需要注意一些细节的地方。1.理解题意,都是回溯问题到底是哪里不同。2.回溯三部曲中的终止条件的处理有了很大不同,把收集最终结果放在了前面,因为如果放在终止条件中就相当于组合问题,只收集了叶子节点,还会漏掉目前的节点值。3.注意一些细节,比如startIndex参数,控制什么。1.理解题意,搞清楚到底要什么,需要注意什么。2.回溯三部曲,终止条件不需要了,是怎样的。
2026-03-05 21:25:11
350
原创 代码随想录算法训练营第十六天| 39.组合总和,40.组合总和||,131.分割回文串
1.搞清楚题意,明白输入什么,要输出什么结果。2.回溯三部曲,明确参数,终止条件,单层搜索逻辑。3.注意一些细节。1.搞懂题意,这个去重应该怎样去重,建议画图理解,直接想的话会很抽象。2.回溯三部曲,其中单层搜索逻辑这里需要处理去重的操作,明确到底要去的是那部分。我理解的就是如果相同的元素以及在同一层开过一次头了,那么其余值相同的元素在开头就会出现重复,去掉这部分就行。怎么去掉这部分?就需要一个辅助判断的条件。3.注意一些细节问题。1.搞懂题意,分析解决这个题需要解决哪些问题。
2026-03-04 11:29:43
401
原创 代码随想录算法训练营第十五天| 回溯算法理论基础,77.组合,216.组合总和|||,17.电话号码的字母组合
1.搞清楚题目是什么问题,最好用树的形式来解决。2.回溯三部曲,参数返回值,终止条件,单层搜索逻辑。3.结果要存哪里。1.明确题目怎样转化成树的形式解决。2.回溯三部曲。3.注意一些细节的限制。1.一定要理解清楚题意,非常重要。2.回溯三部曲。3.一些需要注意的细节问题。
2026-03-03 19:18:50
371
原创 代码随想录算法训练营第十四天| 513.找树左下角的值,112.路径总和
1.明确题目的意思,最后要的结果是怎么得到的。2.确定二叉树怎么遍历,这个题目由于不处理中,所以前中后序均可。3.明确递归函数怎么写,递归三部曲。1.明确二叉树的遍历顺序,前中后序均可。2.递归三部曲,需要根据题意明确终止条件以及单层递归的逻辑。
2026-03-02 20:38:25
608
原创 代码随想录算法训练营第十三天| 226.翻转二叉树,101.对称二叉树,104.二叉树的最大深度
实际本质上就是遍历,只不过需要做一个该节点左节点和右节点交换的过程,而且要注意节点不能重复交换。实质上也是树的遍历,但这个关键的是比较什么以及比较结果返回什么,什么时候一定不轴对称,排除之后就一定剩正确的。这道题也是本质是二叉树的遍历,后序遍历直接求解深度,注意代码中的细节。
2026-02-13 23:41:56
617
原创 代码随想录算法训练营第十二天| 110.平衡二叉树,257.二叉树的所有路径
要求比较高度,必然是要后序遍历。递归三步曲分析:1.明确递归函数的参数和返回值参数:当前传入节点。返回值:以当前传入节点为根节点的树的高度。那么如何标记左右子树是否差值大于1呢?如果当前传入节点为根节点的二叉树已经不是二叉平衡树了,还返回高度的话就没有意义了。所以如果已经不是二叉平衡树了,可以返回-1 来标记已经不符合平衡树的规则了。2.明确终止条件递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为03.明确单层递归的逻辑。
2026-02-11 20:49:26
640
原创 代码随想录算法训练营第十一天| 二叉树基础知识,144.二叉树的前序遍历,94.二叉树的中序遍历,145.二叉树的后序遍历,102.二叉树的层序遍历
int val;//节点元素//左指针//右指针前中后序遍历都采用递归法,只是顺序不一样,但整体的逻辑一样,搞清楚递归的三步条件,即能掌握二叉树的前中后序遍历。层序遍历用到队列,可以多写几遍层序遍历的代码,这种题很多,基本都能解决。
2026-02-11 17:09:28
667
原创 代码随想录算法训练营第十天| 150.逆波兰表达式求值,239.滑动窗口最大值,347.前K个高频元素(补2.7)
本题中每一个子表达式要得出一个结果,然后拿这个结果再进行运算,那么这岂不就是一个相邻字符串消除的过程。但需要注意的是需要进栈前把token中的字符转成整型。这个题是对于队列的应用,不太会,代码我自己还写不出来,看看思路,二刷再写吧。这个题和前一个感觉有异曲同工之妙 但是建议直接看卡哥的。347.前 K 个高频元素 | 代码随想录。
2026-02-10 22:17:41
569
原创 代码随想录算法训练营第九天| 232.用栈实现队列,225.用队列实现栈,20.有效的括号,1047.删除字符串中的所有相邻重复项
这道题考察的就是对栈和队列的掌握程度。使用栈来模拟队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关系。就是输入栈的内容弹出时要push到输出栈里,然后在输出。队列模拟栈不需要两个队列,一个队列即可,需在弹出元素时把栈顶元素重新添加入栈尾即可。第一反应就是用栈来写,但是做题之前一定要搞清楚所有的条件以及题意,这样才能保证逻辑清晰,不乱。但是怎么把条件写成代码,还需要自己思考。我还没太想明白,大家参考这个图,有点明白了。
2026-02-07 23:34:15
593
原创 代码随想录算法训练营第八天| 151.翻转字符串里的单词,55.右旋字符串(代码随想录),KMP思想
这个题就是分为三个步骤,先去重复空格,只保留一个空格,策略是双指针法,遇到单词结束手动添加一个空格,后对整个字符串全部进行反转,然后把各单词在进行反转即可。思路如此,但代码所需的细节较多,需多写几遍。这个题目比较简单,主要搞清楚题意,用到字符串的基本应用即可解决!
2026-02-06 16:39:35
603
原创 代码随想录算法训练营第七天| 344.反转字符串,541.反转字符串||,54.替换数字(代码随想录)
这个挺简单的,就是双指针的简单应用,自己写清楚i,j的边界条件即可。这道题就是上一道反转字符串以及模拟的应用,需考虑清楚条件的判断逻辑以及i的逻辑。当需要固定规律一段一段去处理字符串的时候,要想想在for循环的表达式上做做文章。这个题还是别像我这样投机取巧,数字填充类问题还是需求掌握做法。数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。这么做有两个好处:不用申请新数组。从后向前填充元素,避免了从前向后填充元素时,每次添加元素都要将添加元素之后的所有元素向后移动的问题。
2026-02-05 15:56:33
542
原创 代码随想录算法训练营第六天| 454.四数相加||,383.赎金信
这个题就是map在哈希中的应用,暴力也可以解决,但是暴力时间复杂度会高,所以用哈希法解决是最好的选择,key:a+b的数值,value:a+b数值出现的次数,然后在遍历c,d数组找0-(a+b)如果在map中有,则统计对应value。这个题就是数组在哈希的应用,和昨天那个差不多。
2026-02-04 14:35:26
546
原创 代码随想录算法训练营第五天| 242.有效的字母异位词,349.两个数组的交集,202.快乐数,1.两数之和
总结一下,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!这个题暴力也可以解,但是用哈希法会更快更好,定义一个数组叫做hash用来上记录字符串s里字符出现的次数。需要把字符映射到数组也就是哈希表的索引下标上,
2026-02-03 22:59:00
629
原创 代码随想录算法训练营第四天| 24.两两交换链表中的节点,19.删除链表的倒数第N个结点,面试题02.07.链表相交,142.环形链表||(补1.31的)
操作链表题时,尽量使用虚拟头节点,还有就是想要操作后两个节点,那必须指向这两个的前一个节点,做题时最后画图理解,不然想不太明白。这个题建议画图理解,fast首先走n+1步,为什么是n+1呢,因为只有这样同时移动的时候slow才能指向删除节点的上一个节点(方便做删除操作)。这个还是画图理解吧,直接想的话挺抽象的。然后进行删除操作即可。简单来说,就是求两个链表交点节点的指针。这里同学们要注意,交点不是数值相等,而是指针相等。
2026-02-02 22:34:58
700
原创 代码随想录算法训练营第三天| 203.移除链表元素,707.设计链表,206.反转链表
/ 单链表int val;// 节点上存储的元素// 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数需要进行是不是头节点的判断,然后在进行移除操作。不需要判断,直接进行移除操作。两个都需要注意移除之后要释放移除节点的空间。注意移除时不要写错,必要时可画图辅助。这道题目设计链表的五个接口:获取链表第index个节点的数值在链表的最前面插入一个节点(头插法)在链表的最后面插入一个节点(尾插法)
2026-01-30 22:41:32
661
原创 代码随想录算法训练营第二天| 209. 长度最小的子数组、59.螺旋矩阵、58.区间和(代码随想录)、44. 开发商购买土地(代码随想录)
本文总结了四道算法题的解题思路和实现方法:1. 长度最小的子数组问题:比较了暴力法(O(n^2))和滑动窗口法(双指针优化),后者通过动态调整窗口边界有效降低时间复杂度。2. 螺旋矩阵生成:采用分层填充策略,通过控制循环次数、边界收缩和起始位置变化实现顺时针填充,注意处理奇数阶矩阵的中心点。3. 区间和计算:引入前缀和技巧,通过预计算累加和数组将区间查询优化为O(1)操作,显著提升效率。4. 土地分配问题:利用二维前缀和思想,分别计算行列方向的前缀和,通过遍历所有可能分割线寻找最小价值差,提供原始和优化两种
2026-01-29 22:18:25
646
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素、977.有序数组的平方
两层for循环,一层来遍历数组中的所有元素,满足val则用另一层循环来把这个元素后的元素全部往前移一位。第一层循环的下标-1,数组大小也-1,最后返回数组大小即可。对原数组操作即可,一个快指针,一个慢指针。两个指针都是从头开始。例如:1 2 3 4 3 5 val=3第一遍:fast=0,nums【fast】=1,slow=0;由于1!=3,则nums【slow】=1,slow++;即新数组为1.第二遍:fast=1,nums【fast】=2,slow=1;由于2!
2026-01-28 20:55:07
865
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅