代码随想录算法训练营
文章平均质量分 67
北极以北Pottt
软件工程苦逼,期待翻身。
展开
-
代码随想录算法训练营第三十天 | 93.复原IP地址、78.子集、90.子集 II
找子集其实和找组合差不多,我感觉就是组合加遍历,比如在n个数里找0个,找1个,找2个,直到在n个数里找n个。(当然Carl哥不是这么讲的)Carl认为子集问题就是把树的所有节点都收集起来,每一个节点都是答案。其实和前面的分割回文串差不多,就是在判断是否剪枝和终止条件上不太一样,如果当前分割出的ip地址不符合要求就剪枝,如果四段都分出来就return。大家之前做了 40.组合总和II 和 78.子集 ,本题就是这两道题目的结合,建议自己独立做一做,本题涉及的知识,之前都讲过,没有新内容。原创 2024-05-22 16:41:41 · 201 阅读 · 0 评论 -
代码随想录算法训练营第二十九天 | 39.组合总和、40.组合总和 II、131.分割回文串
拿着笔画一画其实可以知道大概,看图大概就可以看懂了,横向使用for循环,判断每一层切割位置,纵向是递归在当前这种切割的情况下后面的字符串的分割。每一个元素用过就不能再用了,而且每一层里面不能取重复的数。你知道这个任务是几号应该完成的吗,15号,你要不要看看这篇文章是什么时候发出来的。注意题目中给我们 集合是有重复元素的,那么求出来的 组合有可能重复,但题目要求不能有重复组合。本题较难,大家先看视频来理解 分割问题,明天还会有一道分割问题,先打打基础。本题开始涉及到一个问题了:去重。事情真是太多了,不扯了。原创 2024-05-22 09:58:16 · 218 阅读 · 0 评论 -
代码随想录算法训练营第二十八天 | 216.组合总和 III、17.电话号码的字母组合
组合类的题目都差不多的,无非现在一个电话按钮上有多个字母,把数据集,res列表和chosen列表放到__init__(self)初始化函数里。就是一位一位数来判断,每一位的取值用的是for循环,然后在for循环里面嵌套递归函数,遍历下一层。,不理解的去看我的上一条博客,里面我解释了怎么推导的,再不懂可以看上条博客里的链接。强烈建议看看我上一篇里面的基础介绍,我觉得Carl哥说的很对,本题大家刚开始做会有点难度,先自己思考20min,没思路就直接看题解。如果把 组合问题理解了,本题就容易一些了。原创 2024-05-15 16:35:25 · 356 阅读 · 0 评论 -
代码随想录算法训练营第二十七天 | 理论基础、77. 组合
(可以自己在纸上模拟一下,比如9个数取4个,最开始9-4=5,5+2=7,因为左闭右开,所以最高取到6,刚刚好6,7,8,9是能取到的最大的四位数了。图中要在1,2,3,4,,四个数里取4个数,当第一个取2时就不继续递归了,因为第一个数取2后面能取的数就剩3,4,怎么取都取不满4个数,就没必要继续递归了,进行剪枝。其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解。求组合的题目上次备考蓝桥杯时已经学过了,只能说我的知识迁移能力太弱了。原创 2024-05-15 14:35:16 · 534 阅读 · 0 评论 -
代码随想录算法训练营第二十四天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
事实证明思路很重要,要像高中数学那样学会分类讨论,我看了Carl哥的5种分类情况后自己框框就把代码写出来了,一次通过(每日嘻嘻1/1)这道题有个很神奇的解法,Carl哥没有讲具体怎么推导,我也举不出反例,欢迎知道为什么的评论区告诉我。本题比想象中的简单,大家可以先自己想一想应该怎么做,然后看视频讲解,就发现 本题为什么比较简单了。相对于 二叉树的最近公共祖先 本题就简单一些了,因为 可以利用二叉搜索树的特性。还有一种通用的,看不懂可以打开链接看看。相对于 插入操作,本题就有难度了,涉及到改树的结构。原创 2024-05-15 10:21:03 · 241 阅读 · 0 评论 -
代码随想录算法训练营第二十五天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、总结篇
代码随想录回顾了所有的二叉树题目,文末还有一张思维导图,记录了所有二叉树的解题策略。原创 2024-05-14 19:19:45 · 245 阅读 · 2 评论 -
代码随想录算法训练营第二十三天 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
这里首次引入了pre指针,采用的还是二叉树的中序遍历,每次和前一个数进行比较,如果一样,count就+1,每层遍历时在遍历中间节点后更新出现次数最大的数,注意每次更新最大的数需要把原来的res[ ] 清空,因为原来里面装的不是出现频率最大的数了。这道题使用的是后序遍历,如果遍历到当前节点就是p或者q就返回当前节点,层层往回传,最后会传到根节点。(因为是后序遍历,哪怕找到了答案也要遍完的)(我知道我这么讲大家根本听不懂,所以点开视频看吧,Carl哥讲的超级nice,再配合代码应该可以看懂)原创 2024-05-13 20:14:29 · 333 阅读 · 0 评论 -
代码随想录算法训练营第二十二天 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
咳咳,首先,我写题时没注意看这是二叉搜索树了,(其实是我忘了什么是二叉搜索树了。这次是一起操作两个二叉树了, 估计大家也没一起操作过两个二叉树,也不知道该如何一起操作,可以看视频先理解一下。这道题和我们学院自己的OJ上的第一题基本一模一样,就是一直递归,只要坚持左闭右开的原则,问题不大。样例中最小节点 可能是int的最小值,如果这样使用最小的int来比较也是不行的。但本题是有陷阱的,可以自己先做一做,然后在看题解,看看自己是不是掉陷阱里了。要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。原创 2024-05-10 20:50:30 · 1036 阅读 · 0 评论 -
代码随想录算法训练营第十九天 | 104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数
深度和高度是不一样的,深度是从上面的根节点往下数,高度是从下面叶子节点往上数,所以分别适合采用前序遍历和后序遍历。采用因为是求深度,所以采用前序遍历。先判断最左边和最右边是不是一样深度,一样直接按满二叉树算,不一样就一直递归下去。大家 要先看视频讲解,就知道以上我说的内容了,很多录友刷过这道题,但理解的还不够。什么是深度,什么是高度,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。先看视频讲解,和最大深度 看似差不多,其实 差距还挺大,有坑。需要了解,普通二叉树 怎么求,完全二叉树又怎么求。原创 2024-05-10 09:48:16 · 790 阅读 · 0 评论 -
代码随想录算法训练营第二十一天 | 513.找树左下角的值、112. 路径总和、113.路径总和 II 、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树
不过还是得学一下用递归解决,用前序中序后序都可,只要是优先处理左节点就可以。112,和113还是有点区别的,112只要找到一个满足就返回,113要找到所有,不得不说代码一精简完全看不出原来的递归逻辑。学过数据结构的人应该很好理解为什么是那么切割的,不太了解的可以先看看链接。106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树 一起做,思路一样的。本题 又一次设计要回溯的过程,而且回溯的过程隐藏的还挺深,建议先看视频来理解。本题算是比较难的二叉树题目了,大家先看视频来理解。原创 2024-05-09 21:56:30 · 456 阅读 · 0 评论 -
代码随想录算法训练营第二十天 | 110.平衡二叉树、257.二叉树的所有路径、404.左子叶之和
这道题要判断平不平衡是从最下面开始判断,所以应该用后序遍历(左右根),每层递归判断以当前节点作为根节点的子树是不是平衡树。用三部曲来判断:1、明确递归函数的参数和返回值参数:当前传入节点。返回值:以当前传入节点为根节点的树的高度。2、明确终止条件递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为0。3、明确单层递归的逻辑如何判断以当前传入节点为根节点的二叉树是否是平衡二叉树呢?当然是其左子树高度和其右子树高度的差值。原创 2024-05-08 10:22:16 · 316 阅读 · 1 评论 -
代码随想录算法训练营第十八天 | 102.二叉树的层序遍历、226、翻转二叉树、101.对称二叉树
差一点就想出来了,大体思路是对的,一开始不知道对空节点怎么进行操作,链接里是if 非节点就在列表里加入None(没错,就是这么简单的问题我也做不对,一看就会,一些就废是我了)。哈哈哈,这道题我是凭直觉写的,直接就想着不就每一层左右互换就好了,结果一把就过。全做完的,确实本质都是相通的,直接复制粘贴微调代码就可以了。这道题目 一些做过的同学 理解的也不够深入,建议大家先看我的视频讲解,无论做过没做过,都会有很大收获。看完本篇可以一口气刷十道题,试一试, 层序遍历并不难,大家可以很快刷了十道题。原创 2024-05-06 19:33:32 · 169 阅读 · 0 评论 -
代码随想录算法训练营第十四天 | 理论基础、递归遍历、迭代遍历、统一迭代(144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历)
目录题目链接理论基础递归遍历 (必须掌握)递归遍历思路递归遍历代码迭代遍历 (基础不好的录友,迭代法可以放过)前序迭代遍历思路前序迭代遍历代码中序迭代遍历思路中序迭代遍历代码后序迭代遍历思路后序迭代遍历代码统一迭代 (基础不好的录友,迭代法可以放过) 递归遍历是最容易写的二叉树遍历方法了,其实就是三行代码顺序来回调换而已。 迭代遍历 (基础不好的录友,迭代法可以放过)前序迭代遍历思路 迭代本质是用栈。其中先序遍历和后序遍历代码差不多,中序遍历需要额外记思路。原创 2024-05-01 22:30:48 · 435 阅读 · 0 评论 -
代码随想录算法训练营第十三天 | 239.滑动窗口最大值、347.前K个高频元素、栈与队列总结
代码随想录栈和队列在整个代码随想录里其实只排在第三章,从明天开始就是二叉树了,实话说二叉树也还不是最难的地方,(数据结构与算法都学过了),等刷到后面回溯、贪心、动态规划那才能切身体会有多痛苦。。。原创 2024-04-29 21:31:31 · 539 阅读 · 0 评论 -
代码随想录算法训练营第十一天 | 20.有效的括号、1047删除字符串中的所有相邻重复项、150.逆波兰表达式求值
Carl代码写的比我好,就是利用栈, 思路大体差不多,遇到 “(, {, [ ” 对应入栈 “), }, ]”;要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么。大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。还是利用栈,每次都和栈顶元素比较,一样就删去,最后返回栈中元素。本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题。150. 逆波兰表达式求值。原创 2024-04-28 21:57:36 · 246 阅读 · 0 评论 -
代码随想录算法训练第十天 | 栈与队列理论基础、232.用栈实现队列、225.用队列实现栈
因为五一调休加上学院王者比赛还有这两天忙着交大创中期检查材料,好像两天没有更新了。今天开始栈和队列的章节。原创 2024-04-28 19:38:34 · 252 阅读 · 2 评论 -
代码随想录算法训练营第九天 | 28.实现strStr()、459.重复的字符串、字符串总结、双指针回顾
比较简单,大家读一遍就行代码随想录。原创 2024-04-25 21:57:05 · 391 阅读 · 1 评论 -
代码随想录算法训练营第八天 | 344.反转字符串、541.反转字符串II、卡码网:54.替换数字、151.翻转字符里的单词、卡码网:55.右旋转字符串
我的思路是把字符串长度先和2k进行取余的操作,得到前面的整数段和后面的小段,对前面的整数段使用for循环,步长是2k,在每一次循环中对前k个元素进行反转。建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数。建议:这道题目基本把 刚刚做过的字符串操作 都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练。建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。我的一坨,直接看链接吧。原创 2024-04-24 19:53:39 · 956 阅读 · 0 评论 -
代码随想录算法训练营第七天 | 454.四数相加、383.赎金信、15.三数之和、18.四数之和
这道题把给的四个数组分成两两一份,用两个两层的for循环,先把前面两个数组相加有可能出现的和存储到字典里,在计算后面两个数组里两两相加的和,根据相加等于0的规则,判断后面这个和的负数在不在字典里。建议:本题虽然和 两数之和 很像,也能用哈希法,但用哈希法会很麻烦,双指针法才是正解,可以先看视频理解一下 双指针法的思路,文章中讲解的,没问题 哈希法很麻烦。写完三数之和后,我坐在了图书馆的沙发上,想着难道还要两个left指针,还是要在数组中间在搞一支指针,(原谅我融会贯通能力差),想了很久才悟了,哦~原创 2024-04-24 18:25:12 · 329 阅读 · 0 评论 -
代码随想录算法训练营第六天 | 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和
哈希表理论基础建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。这句话很重要,大家在做哈希表题目都要思考这句话。当我们遇到了要快速判断一个元素是否出现集合里时,就要考虑哈希法。——Carl。原创 2024-04-23 21:49:48 · 840 阅读 · 0 评论 -
代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表倒数第N个结点、面试题0207.链表相交、142.环形链表II
一开始想的和Carl哥的想法差不多,但是具体几个结点之间的赋值先后顺序还是很容易混乱,加上我这菜的一批的编码能力,还是没能自己完成。经过一番胡乱思考,我以为可以先遍历一次,看看这个链表有多长,然后再遍历一次正着数到我要删的那个节点,把他删掉。我后知后觉才发现,那。首先注意,相交不是指值相等,而是指两个结点指针相等(指针相等,值肯定也相等,反过来就不一定了)。双指针的操作,要注意,删除第N个节点,那么当前遍历的指针一定要指向第N个节点的前一个节点。这道题如果链表有给前驱节点就很容易了,关键是没有啊家人们!原创 2024-04-22 21:30:01 · 749 阅读 · 0 评论 -
代码随想录算法训练营第五天
周日打烊(虽然今天是周一了)原创 2024-04-22 21:35:42 · 321 阅读 · 0 评论 -
代码随想录算法训练营第三天 | 203.移除链表元素 、707.设计链表、206.反转链表
Carl的答案就是常规答案,翻转指针,维护三个变量,pre,cur,temp,注意要先把cur.next赋值给temp,不然后面的结点全都索引不到了。我第一反应是把所有元素存进一个列表里,然后用reverse()函数反转后一个个塞回去(笑晕了) ,后面一想就知道不对,数据量大一点,这要存到什么时候。麻了,这两天又是王者打比赛,又是算法训练营刚起步,又是补打卡的一天,趁星期天没有任务把星期六的补补吧。如果,你也是小白,那么,我觉得,这个思路,泰裤辣(bushi)建议:了解一下链接基础,以及链表和数组的区别。原创 2024-04-21 00:07:16 · 488 阅读 · 0 评论 -
代码随想录算法训练营第二天 | 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
对原来的数组采用双指针法,一个指针在原数组最前面,一个在最后面,每一次比较一下哪个数的平方更大,将大的写到result的最后面,不断循环,结束。这题没有套路,没有算法, 理清逻辑,Carl哥说得对,坚持循环不变量原则,每一条边都坚持左闭右开原则,按照两层for循环,第一层循环,控制矩阵画到第几圈由外到内一圈圈画,第二层for循环,控制每次画四条边。我写的代码有点乱,建议直接看上面的文章讲解。题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。原创 2024-04-20 22:59:59 · 998 阅读 · 0 评论 -
代码随想录算法训练营第一天 | LeetCode704.二分查找、LeetCode27.移除元素
二分法和双指针法的应用原创 2024-04-18 20:59:56 · 311 阅读 · 1 评论