自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法训练营 day19 | 回溯算法part01

总结:需要做剪枝,不然会TLE,整体和上一题的代码十分类似。只需要在加和大于目标值时直接返回就行。总结:见到回溯类的题目要先想到模版,然后先写出来基础版本之后再去考虑是否可以剪枝的问题。继续坚持刷题吧,准备刷完题去实习。有好多二叉树的题跳过了,先不刷了。可以进行剪枝,在遍历当前层的选择时可以缩小范围。

2024-09-24 21:37:43 329 1

原创 算法训练营 day18 |二叉树part06

在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。要理解如果返回值left为空,right不为空为什么要返回right,为什么可以用返回right传给上一层结果。求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。总结 :使用dict统计频率,然后遍历找出最大频率的key。放假回来了,继续佛系打卡,哈哈哈哈哈。总结:先存到list中,然后遍历处理。

2024-08-12 21:41:13 351

原创 算法训练营 day17 | 二叉树 part05

总结:利用了二叉搜索树的特性,根节点的值大于左孩子小于右孩子。总结:使用前序遍历,把root2的节点都加到root1上。总结:利用二叉搜索树的特点,中序遍历得到递增的序列。总结:和昨天做的根据前序和中序构造二叉树的题很像。

2024-07-24 21:46:03 366

原创 算法训练营 day16 |二叉树 part04

总结:需要注意的是在路径更新上,新的节点值应该添加在路径的最后面。也就是要写成 path + [node.right.val],不能写成 [node.right.val] + path。不然路径反的,添加到res时还要进行反转处理。总结:需要注意的是,最左边的一个节点不一定是最底层最左边的节点。迭代法直接套用层序遍历模版,修改一下输出结果就行。总结:和上一题差不多。需要改变切割preorder数组的位置和递归时的顺序。总结:二刷再来看看,难。

2024-07-23 22:04:52 352

原创 算法训练营 day15 | 二叉树part03

总结:修改层序遍历代码,记录node个数即可。总结:回溯法有点似懂非懂的,二刷再来看看。总结:代码也挺好理解的。

2024-07-22 11:13:35 528

原创 算法训练营 day14 | 二叉树 part02

递归法:使用前序和后序遍历都可以只是在反转指针的时候改变一下位置就行。如果想要使用中序遍历,要把交换指针放在递归左右子树之间,并且要把递归右孩子改成左,因为在交换后,刚才已经遍历过的左子树被换到了右边,如果这时候还遍历左子树那么就重复遍历了。总结:代码使用递归法,后序遍历。题目中说的是:最小深度是从根节点到最近叶子节点的最短路径上的节点数量。总结:代码使用的是递归法,当然使用迭代法,或者层序遍历都可以实现。什么是叶子节点,左右孩子都为空的节点才是叶子节点!

2024-07-18 15:49:23 663

原创 算法训练营 day13 | 二叉树part01

递归遍历(前序)总结:代码为前序遍历,只要调整添加节点值到res里的代码位置即可变成后序遍历或者中序遍历。总结:使用栈来实现非递归。先让root入栈然后出栈,再让右孩子入栈然后左孩子入栈,然后再出栈。这样出栈元素排列即为中左右后序遍历:前序遍历的基础上,调整左右子节点入栈顺序再反转结果数组,即为后序遍历。

2024-07-16 21:56:09 242

原创 算法训练营 day11 | 栈与队列part02

总结:如果遇到是数字则直接入栈,如果遇到是操作符,则弹出栈中两个元素使用该操作符进行操作.tokens[i].isdigit()只能识别正数,对于负数需要单独检查。需要注意的是,再进行除法操作时,应该使用“//”整除。我在操作时转换成整数,可能包含隐式转换,所以意外的避免了这个问题。滑动一个位置,pop一个元素,再push一个元素。如果加入元素比前面元素都大,则弹出前面的元素。思路:使用dict记录元素出现的频率,然后使用小顶堆统计前k个最大元素。总结:有点难,二刷再来看吧。150. 逆波兰表达式求值。

2024-07-15 21:09:12 242

原创 算法训练营 day10 |栈与队列part01

总结:使用一个list进行存储结果字符,查询s中当前元素是否和数组最后一个元素相等,如果相等就让它出栈。这里的重复只是有两个元素相同应该不包含三个以上相同元素的情况。总结:使用一个队列模拟栈,将队列中前面的所有元素依次移动到队列的末尾,只留下最后一个元素,然后将这个最后的元素弹出。总结:使用两个栈来模拟队列。让元素先进入第一个栈,然后出栈进入到第二个栈,再从第二个栈出来时就实现了先进先出。总结:使用一个栈进行存储,如果当前元素和栈顶元素匹配,则进行pop,最后如果栈里不含有元素则说明都匹配成功了。

2024-07-15 14:36:07 252

原创 算法训练营 day9 | 字符串part02

总结:这题是KMP算法的应用,二刷再来看看吧。代码实现也是前缀表减1的版本。解法一:先进行反转然后前k个和后面的部分分别再次反转。总结:KMP算法挺难的,二刷再来看看吧。代码实现是前缀表减1的版本。解法二:将字符串拆分成单词,转成列表,然后反转单词再转换成字符串。解法一:整体思路是,先去掉空格,反转整个列表,然后在反转单词。解法二:将字符串后面的k个字符移到前面。28. 实现 strStr()151.翻转字符串里的单词。卡码网:55.右旋转字符串。459.重复的子字符串。

2024-07-12 16:37:50 231

原创 算法训练营 day8 | 字符串part01

总结:这题主要在处理前2k个元素的前k个,还有把s突然转换成list进行处理。切片操作+函数调用对当前区间的处理。总结:这题也使用了一下双指针,还挺简单的。总结:遍历发现是数字就替换掉。541. 反转字符串II。卡码网:54.替换数字。

2024-07-11 11:21:59 268

原创 算法训练营 day7 | 哈希表part02

然后处理ransonNote,如果出现一次就让dict中对应的value值-1,如果刚好满足题意那么dict中不会出现小于等于-1的value值。后面找到原因是因以right的定义要写到for循环里面,这样才能保证下次for循环开始的时候right被重置为末尾。这题也可以用hash法,开个数组去存,每次字母-‘a’对应ascii码值作为下标,数组里存该字母出现的次数。这里是把前两个数组的加和以及出现次数存到dict中,后面查询后两个数组元素之和的相反数是否出现在之前的dict中。454.四数相加II。

2024-07-10 23:25:07 274

原创 算法训练营 day5 | 哈希表part01

set+数组解法:把nums1出现的数字以及出现的次数存到字典中,然后查询nums2中的数字是否出现在字典中,出现就添加到结果集合中,然后删除对应字典中的值。利用了set不会出现重复元素的特性。总结:数组解法和上一题的思路类似,在nums1中出现的hash表对应为1,在nums2中重复出现的变为2,在hash表中过滤大于1的即可。如果两个字符串有不同的字母,那么hash表中一定不全为零。总结:重点在于要先让数字转换成字符串方便处理。如果经过计算的数重复出现那一定是陷入了死循环,不会满足快乐数的要求。

2024-07-09 21:34:20 260

原创 算法训练营 day4 | 链表 part2

总结:本题依然要用到虚拟头节点。使用temp1和temp2把第一次交换的第二个节点和第二次交换的第二个节点保存下来。防止断链。需要注意的是,循环的判断条件。每次处理cur后面的两个节点。当节点总数量为偶数时,cur指针会被更新到最后一个节点,此时如果下个节点为空,则停止循环,奇数时cur指向倒数第二个节点。还要注意的是必须先判断cur.next然后再判断cur.next.next,反过来的话发生指针异常。

2024-07-08 14:44:18 388

原创 算法训练营 day3 |链表

总结:这里是用的是添加虚拟头指针的方法。主要方便使用统一的规则删除链表节点。如果不定义虚拟头指针,则需要对于移除链表头节点进行单独处理,也就让头节点往后移动一次head=head.next即可。总结:使用虚拟头指针,并要注意各种情况的边界条件。

2024-07-06 09:25:34 226

原创 算法训练营 day2 | 双指针 & 滑动窗口

是:开一个新数组和一个右指针,原数组双指针,原数组左右指针指向值的平方进行比较,大的一边先赋值给新数组最后一个位置,然后双指针进行左移或右移(每次只有一边动),新数组的右指针左移。,固定左指针,当左指针指向的平方值小于右指针指向的平方时,左指针指向平方和右指针指向值进行交换,然后右指针左移。解题思路:左右指针用来表示滑动窗口的边界,当窗口内总值大于target时要减小窗口,也就是更新min_len,更新窗口内的值然后左指针右移,否则就让右指针右移扩大窗口。总结:自己硬想想了半天,按照示例想到了一种。

2024-07-04 12:03:15 248

原创 算法训练营第一天|双指针(二分查找 & 移除元素)

我的解法是:左右各一个指针,如果右指针指向数据满足val则进行左移.然后当左指针指向数据满足val值时,左右指针指向数据互换.把val值换到数组的后面.然后左指针右移.题解是进行按照数组“删除”的原理进行的.利用快慢指针,快指针发现是val值,则把后一个元素前移,覆盖当前val值的位置,然后快慢指针同步后移.总结:这题没尝试暴力解,直接使用的双指针解法.看了一下题解和我的解法稍微不同.很久没刷算法题,很生疏的,虽然最后都AC了,需要继续加油.的情况,left == right是没有意义的,则应该使用。

2024-07-03 21:33:06 386

空空如也

空空如也

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

TA关注的人

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