代码随想录算法训练营刷题
代码随想录算法训练营
总系学不废
加载中...
展开
-
代码随想录算法训练营二刷第19天 | 哈希表——set完结、部分map
遍历,查询哈希表中是否出现过target-nums[i],若未出现,则将当前数值存放到哈希表中,由于返回的是下标值,因此将target-nums[i]作为key值,下标值作为value值,最后返回即可!快乐数是重复 将一个正整数的每个位置上的数字的平方和替换为它自身,然后重复这个过程直到这个数变为 1,也可能是。在这个重复替换的过程中,如何判断这个数进入了无限循环呢?题目给定4个长度均为n的整数数组,在每个数组中各选一个元素,使得四数相加等于0。本题的暴力解法为n^4,并非最优的。中找到 相加等于目标值。原创 2024-05-06 12:01:41 · 368 阅读 · 0 评论 -
代码随想录算法训练营二刷第18天 | 哈希表——数组和部分set
std::set和std::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希, 使用unordered_set 读写效率是最高的,本题并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set。上面两道题目用map确实可以,但使用map的空间消耗要比数组大一些,因为map要维护红黑树或者符号表,而且还要做哈希函数的运算。数组就是简单的哈希表,但是数组的大小是受限的!中是求字符串a能否组成字符串b,而不用管字符串b 能不能组成字符串a。原创 2024-05-05 21:37:22 · 349 阅读 · 0 评论 -
代码随想录算法训练营二刷第14天 | 二叉搜索树完结
要记住 二叉搜索树自带搜索方向 这个特性!要找 二叉搜索树的最近公共祖先,那么相当于就是二叉搜索树的搜索,要想到“二叉搜索树的搜索”的迭代法其实是利用了二叉树的特性的,那么,本题也是可以用迭代法简单解决的!略本题有以下五种情况:注意若要删除一个节点的左/右孩子,那么就要先将这个节点保存,否则会出错!略做这道题目之前大家可以了解一下这几道:上述题目同本题一样都是构造二叉树类型的题目。本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间。分割点就是数组中间位置的节点。递归三部曲:删除二叉树节点,增加二原创 2024-05-05 21:31:16 · 347 阅读 · 0 评论 -
代码随想录算法训练营二刷第13天 | 二叉搜索树中的最小绝对值、二叉树中的众数、二叉树的公共祖先
在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。本题:判断逻辑是 如果递归遍历遇到q,就将q返回,遇到p 就将p返回,那么如果 左右子树的返回值都不为空,说明此时的中节点,一定是q 和p 的最近祖先。,因此,本题可以直接进行中序遍历,然后用双指针法比较相邻两个节点直接的差值,并更新差值的最小值,最后得到结果!因为后序遍历(左右中)就是天然的回溯过程,可以根据左右子树的返回值,来处理中节点的逻辑。原创 2024-05-04 11:49:08 · 586 阅读 · 0 评论 -
代码随想录算法训练营二刷第11天 | 合并二叉树、二叉搜索树中的搜索
其实本题是同样的道理,我们在寻找一个不符合条件的节点(某一特性),如果没有找到这个节点就遍历了整个树,如果找到不符合的节点了,立刻返回。对于二叉搜索树可就不一样了,因为二叉搜索树的特殊性,也就是节点的有序性,可以不使用辅助栈或者队列就可以写出迭代法。分析:这个题目如果用层序遍历,那么需要用一个值去代替每一个空值,也就是位置不好定,做起来肯定麻烦!对于一般二叉树,递归过程中还有回溯的过程,例如走一个左方向的分支走到头了,那么要调头,在走右分支。要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。原创 2024-05-04 10:56:48 · 412 阅读 · 0 评论 -
代码随想录算法训练营二刷第10天 | 二叉树的左下角节点、路径总和、构造二叉树、最大二叉树
在记录最后一行的第一个叶子节点时:只要当前的深度是已经遍历过的深度的最大值,那么就记录下来,在最后一行时,由于深度已经是最大了,因此不会再有新的值覆盖,因此此时记录的叶子节点即为最后一行的第一个叶子节点!可以使用前序遍历(当然中序,后序都可以,因为本题没有 中间节点的处理逻辑,只要左优先就行),保证优先左边搜索,然后记录深度最大的叶子节点,此时就是树的最后一行最左边的值。即首先要是最后一行,然后是最左边的值:等价于求最大深度处的最左侧叶子节点。,也就是要记录路径,并且需要遍历所有的节点。原创 2024-04-30 21:29:05 · 353 阅读 · 0 评论 -
代码随想录算法训练营二刷第9天 | 二叉树的节点数量、二叉树的平衡和二叉树的所有路径
那么用后序遍历的方法求完全二叉树的节点数量,首先应该判断一个子树是否是满二叉树,并计算该满二叉树的深度,若是,直接用公式计算该子树的节点数量,若不是则继续递归。,判断左右子树的高度差绝对值超不超过1(求高度用的是后序遍历),若不超过1,则返回该节点的最大高度;若超过1,那就不用再进行判断了,因为整颗树就已经是非平衡的二叉树,直接返回false就可以了!,在 递归函数中 往往已经对某个节点进行了处理,因此,在递归函数中 再嵌套调用递归函数后,相当于已经处理了下一个节点,所以在调用完递归函数后,进行回溯!原创 2024-04-29 19:47:12 · 173 阅读 · 0 评论 -
代码随想录算法训练营二刷第8天 | 二叉树的对称以及深度
以上面两题为例,对根节点而言,求最小深度就是要求最小的高度,要 求根节点的最大/最小高度,就要求左右子树的最大/最小高度,得到左右子树的最大/最小高度以后 + 1;然后要 求左子树的根节点的最大/最小高度,······,最终递归到了叶子节点:要得到叶子节点的高度就返回以叶子节点为根节点的树的最大/最小高度,因此终止条件就是遇到空节点时将返回0,然后在上一层+1;最大深度的本质其实就是:从所有的叶子节点出发,往根节点的方向搜索,其中经过节点数量最大的就是最大深度!所以说只能用后序遍历!求深度用的是前序遍历。原创 2024-04-29 19:38:40 · 321 阅读 · 0 评论 -
代码随想录算法训练营二刷第7天 | 二叉树的遍历方式
写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。层序遍历就是图论中的广度优先搜索,要想完全的访问每一层的数据,仅依赖树本身的结构(或者图本身的结构)是无法做到的,必须。:这道题与上一道题的区别在于题目给定的二叉树的结构不同,但是用 我上一题的题解,完全也可以无修改的ac这道题!在首先统计每一层的节点个数 与 节点值的和,除以 每一层的节点个数即可。原创 2024-04-28 20:59:06 · 746 阅读 · 0 评论 -
代码随想录算法训练营二刷第4天 | 栈与队列
在栈中,当我们进行了一个的时候,我们接下去的操作一定要想着!或者在进行一定要有防止操作空栈的步骤!原创 2024-04-27 20:37:00 · 313 阅读 · 0 评论 -
代码随想录算法训练营二刷第6天 | 239.滑动窗口最大值、347.i前k个高频元素
所以大家经常说的大顶堆(堆头是最大元素),小顶堆(堆头是最小元素),如果懒得自己实现的话,就直接用priority_queue(优先级队列)就可以了,底层实现都是一样的,从小到大排就是小顶堆,从大到小排就是大顶堆。在遍历原数组的时候,只需要把窗口的头元素加入到multiset中,然后把窗口的尾元素删除即可。:本题使用单调队列的经典题,题目要求返回 每个固定了k个元素的不断向前滑动的窗口 中的最大值。,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,看起来就是一个队列。原创 2024-04-27 20:35:01 · 602 阅读 · 0 评论 -
代码随想录算法训练营一刷总结篇
3月初开始,因为投了好几个暑期实习,到了3月底4月初那段时间,有时候还是得花时间去复习之前刷过的题准备笔试。但是因为我是一刷都没完成,所以笔试的时候经常都还是一脸懵,做了美团的2次笔试一共10道题,自己能做出来(但也不知道对错的那种)的只有2道;面地平线的时候做的是二叉树不同路径的进阶版,因为没复习到也没做出来,所以一直感觉自己开始的还是慢了,很多机会从自己面前溜走了抓不住。去年12月份的时候开始陆续刷题,开始刷了半个多月,后来因为研究生开题答辩,停刷了半个月,到1月上旬又是拖了一个星期才开始继续刷的。原创 2024-04-23 09:56:37 · 362 阅读 · 0 评论 -
代码随想录算法训练营第35天 | 860. 柠檬水找零、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树
【代码】代码随想录算法训练营第35天 | 860. 柠檬水找零、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树。原创 2024-03-26 23:40:57 · 94 阅读 · 0 评论 -
代码随想录算法训练营第28天 | 93. 复原 IP 地址、78. 子集、90. 子集 II
93. 复原 IP 地址 - 力扣(LeetCode)原创 2024-03-20 00:09:39 · 173 阅读 · 0 评论 -
代码随想录算法训练营第27天 | 39. 组合总和、40. 组合总和 II、131. 分割回文串
其它就是注意 sum += candidates[i] , path.push_back[candidates[i]],不要写成了i。想到了存在相邻的元素需要跳元素,但是理解不深刻,还是Carl厉害!原创 2024-03-19 18:11:14 · 203 阅读 · 0 评论 -
代码随想录算法训练营第24天 | 77. 组合
【代码】代码随想录算法训练营第23天 | 669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜。原创 2024-03-15 23:54:35 · 223 阅读 · 0 评论 -
代码随想录算法训练营第23天 | 669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树
跟删除节点的方式是差不多的。原创 2024-03-14 21:59:14 · 246 阅读 · 0 评论 -
代码随想录算法训练营第22天 | 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点
递归法,遇到空节点就插入,返回的是插入的新节点,最后层层返回即可得到根节点。因为二叉搜索树是有序的,那么就可以向二分法一样去有向的搜索。只有分情况讨论了,才属于是真正审好题目!做题的时候一定要审好题,然后分情况讨论。原创 2024-03-14 17:31:13 · 236 阅读 · 0 评论 -
代码随想录算法训练营第21天| 530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先
针对非二叉搜索树的思路是有的,但是没做,而且最后发现自己的思路也忽略了map的value项不能排序的问题。原创 2024-03-13 23:22:40 · 421 阅读 · 0 评论 -
代码随想录算法训练营第20天| 654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树
二叉树的题目都比较难,一刷都是看的代码随想录视频,二刷再总结吧!原创 2024-03-12 00:29:11 · 158 阅读 · 0 评论 -
代码随想录算法训练营第18天| 513. 找树左下角的值、257. 二叉树的所有路径、404. 左叶子之和
【代码】代码随想录算法训练营第18天| 513. 找树左下角的值、257. 二叉树的所有路径、404. 左叶子之和。原创 2024-03-11 00:37:56 · 231 阅读 · 0 评论 -
代码随想录算法训练营第17天| 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
这道题加上回溯的过程更加不会做了555555~原创 2024-03-10 21:39:09 · 192 阅读 · 0 评论 -
代码随想录算法训练营第16天| 104. 二叉树的最大深度、559. N 叉树的最大深度、111. 二叉树的最小深度、222. 完全二叉树的节点个数
思路同二叉树的最大深度,用。二叉树最大深度这道题用。原创 2024-03-08 00:27:58 · 348 阅读 · 0 评论 -
代码随想录算法训练营第15天| 102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉树
其实思路就可以理解为:将所有的节点的左右节点进行翻转一次就可以,所以这道题用层序遍历也是很简单。这道题目的思路其实很简单,关于递归的解题思路自己也想到了,但是不自信 最后没做出来。这道题的正常解法(迭代法)二刷时能做出来,bugfree,但是递归法没有掌握。原创 2024-03-07 00:27:18 · 200 阅读 · 0 评论 -
代码随想录算法训练营第14天| 144. 二叉树的前序遍历
1、这种可能发生空指针异常的地方一定要进行非空指针判断。2、迭代法:在左右节点入栈之前,要。原创 2024-03-06 00:38:26 · 156 阅读 · 0 评论 -
代码随想录算法训练营第11天| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
1、对于字符串型数据,既可以存储为int(ASCII形式),也可以存储为char型2、思路记得的,但是实现的细节记不住啊!!!!!!!!!原创 2024-03-03 01:38:01 · 143 阅读 · 0 评论 -
代码随想录算法训练营第10天| 232. 用栈实现队列、225. 用队列实现栈
记得是用两个栈实现的队列,但是细节记不太住,看了视频才勉强缝缝补补做出来。原创 2024-03-02 00:52:21 · 290 阅读 · 0 评论 -
代码随想录算法训练营第8天| 344. 反转字符串、541. 反转字符串 II、54. 替换数字、151. 反转字符串中的单词、右旋字符串
双指针法移除多余的空格,但是相对于移除元素并不简单!翻转整个字符串再翻转字符串中的单词。这道题的思路和翻转字符串中的单词相似,首先翻转整个字符串,再翻转前后两段!该题使用的是双指针思路,想到了,但是没有想的很明白。,但是即使是二刷,我还是没想起来!知道是模拟,但是理不清思路!15min做完这题!原创 2024-02-29 11:29:51 · 168 阅读 · 0 评论 -
代码随想录算法训练营第7天| 454. 四数相加 II、383. 赎金信、15. 三数之和、18. 四数之和
这道题目的暴力解法是O(n^4),可以与两数之和一样使用哈希法解决,但是必要两个嵌套for循环了!这道题可以采用的哈希结构为map类型的,key值作元素值,value值作为同一个key值出现的次数。这道题有哈希法的影子!与字母异位那题很像。由题知不可重复,采用数组。想到了哈希法,但是不太会做。原创 2024-02-27 12:21:39 · 268 阅读 · 0 评论 -
代码随想录算法训练营第6天| 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
这道题一看是有思路的:用哈希表,遍历查找哈希表中是否出现过target-nums[i],若未出现,则将该数值存放到哈希表中,由于返回的是下标值,因此将target-nums[i]作为key值,下标值作为value值,最后返回即可。第二次做这道题:想到了用哈希法,想到了字符串类型的数据做这道题时可以根据字符串中的字符都是小写的,将字符转换为int型,然后转成数组下标;由于结果唯一,且无序!其次考察无限不循环的判断(不循环就是说不出现重复的,因此需要检测是否出现重复值,故有哈希函数的存在)原创 2024-02-26 12:24:12 · 368 阅读 · 0 评论 -
代码随想录算法训练营第4天| 24. 两两交换链表中的节点、19. 删除链表的倒数第 N 个结点、面试题 02.07. 链表相交、142.环形链表II
看到题目的思路是想到双指针法,并且:是需要判断链表节点的个数的(在循环条件中就可以判断节点的个数)这道题也可以用双指针法,两个指针中间间隔的数量正好为输入参数n,然后同步移动直到链表末尾。思路是有的,就做的太冗余导致执行超出了时间限制。知道是采用快慢双指针的写法,但是不知道如何写!原创 2024-02-24 16:26:32 · 166 阅读 · 0 评论 -
代码随想录算法训练营第3天| 203. 移除链表元素、707. 设计链表、206. 反转链表
首先是:定义头指针的时候没有用new开辟新的空间再赋值,这与将已有的空间重命名 是不一样的!(即下面的定义dummydead(需要开辟新地址) 和定义cur(相当于重命名而已)本质就是不一样的,要注意区别!看完这道题想上手的时候,感觉跟之前做的“直接给出链表的定义,然后我直接开辟新空间进行操作” 这种方式不一样,也就是说:我不知道初始化的是哪个val和哪个next指针。其次是:循环条件处不需要加上cur->next->next的判断,否则将判断不了最后一个元素!原创 2024-02-24 00:53:32 · 159 阅读 · 0 评论 -
代码随想录Leetcode刷题总结
【代码】Leetcode刷题小tips。原创 2024-02-22 15:55:23 · 648 阅读 · 1 评论 -
代码随想录算法训练营第2天| 977. 有序数组的平方、209. 长度最小的子数组、59.螺旋矩阵II
本题一看题目是能想到用双指针法的,但是对于一些细节把握不到位,导致没直接做出来。即对于判断到左右两个数值相等的情况,不需要考虑同时移动两个指针,只需要移动其中一个,而另一个指针的数值依旧是存在原数组中(也没有丢失)的。的原则,也没有想到一个while循环包着4个for循环的解题方向。想到了双指针组成滑动窗口的解题思路,但是不懂具体实现代码如何写。本题对于模拟的思路不清晰,没有想到要坚持循环过程中的。看完代码随想录视频和文字版题解做的。(不建议参考此题解)原创 2024-02-22 15:48:12 · 485 阅读 · 0 评论 -
代码随想录算法训练营第1天| 704. 二分查找、27. 移除元素
作为不变量,在二分查找的整个过程中必须保持 区间的定义 不变!区间的定义有两种:左闭右闭 和 左闭右开。其次是。原创 2024-02-21 09:54:43 · 547 阅读 · 0 评论