- 博客(18)
- 收藏
- 关注
原创 代码随想录算法训练营第二十天|235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
代码随想录文章讲解代码随想录文章讲解代码随想录文字讲解今天的题目也都是二叉搜索树的题目,做二叉搜索树的题目,还是要注意利用其特性。在删除和插入二叉树节点的时候使用递归,可以利用返回值进行节点赋值的操作,这样比较简单不用重复去判断条件。
2024-08-05 21:00:12
697
1
原创 代码随想录算法训练营第十八天|530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先
代码随想录文章讲解代码随想录文章讲解代码随想录文章讲解今天一部分的训练还是针对二叉搜索树的,在解决二叉搜索树的问题:1.一般用中序遍历 2. 要利用二叉搜索树的特性,采用中序遍历的话,节点值是单调递增的,因此可以采用将节点值保存在数组中然后解题;也可以采用递归+双指针的思路解题,解题过程中要注意代码处理的技巧(比如二叉搜索树众数的解题过程中我们需要清空结果数组的这个逻辑)。
2024-08-04 16:15:20
730
原创 代码随想录算法训练营第十七天| 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
代码随想录654.最大二叉树文章讲解代码随想录617. 合并二叉树文章讲解代码随想录700.二叉搜索树中的搜索文章讲解代码随想录98.验证二叉搜索树文章讲解文章讲解今天大部分的题目都是和二叉搜索树相关的题目,要明确:1)二叉搜索树的性质,是左子树的节点值均小于根节点的值,右子树所有节点的值均大于根节点的值,左右子树也同样满足这个性质。2)根据二叉搜索树的性质利用中序遍历的话,保存在数组中,数组是升序的。
2024-08-03 16:52:47
963
原创 代码随想录算法训练营第十六天|找树左下角的值 路径总和 从中序与后序遍历序列构造二叉树
代码随想录找树左下角的值文章讲解代码随想录文章讲解解题思路和上边的题目是相似的不同的是需要获取到所有的目标路径并进行保存。1. 遍历顺序:前中后都可以,因为没有中的处理逻辑。2. 递归三部曲:入参:根节点以及目标值;返回值:布尔值终止条件:当前节点的左右节点均为空且目标值减为0,添加当前路径到结果列表中然后返回;当前节点的左右节点均为空且目标值不为0,直接返回。单次递归逻辑:左:遍历左节点不为空,添加左节点到路径中;然后目标值减去左节点的值;然后继续遍历左子树;
2024-08-02 23:27:23
942
原创 代码随想录算法训练营第十五天| 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 222.完全二叉树的节点个数
今日的题目都是用递归方法解决的,加深了对于递归的理解,并且在练习过程中有意识的先去想遍历顺序,然后按照递归三步曲解题,但是发现自己对于单次递归的逻辑还是不太能够很好的梳理出来,感觉还是有的绕,后边继续加强连续吧。
2024-08-01 15:04:18
1030
原创 代码随想录算法训练营第十四天| 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度
首先,自己写代码的话,仅仅想到用的是递归,但是没具体想是要用前中后序遍历,就糊里糊涂的把代码写出来了,虽然写对了,但是缺乏了进一步的思考。1.递归法前序、后序都是比较好写的,回看了下我上边的是前序的递归写法。中序的话,由于在翻转完左孩子以后,翻转中节点,这样左孩子其实就变成了右孩子,所以后边就不能再对右孩子翻转了,继续要进行的操作是还要翻转左孩子。2. 迭代法(借助栈)3. 层序遍历(借助队列)1. 整体思路:我们要比较的其实不是左右节点而是二叉树的两个左右子树,更明确一点是比较这两个子树的。
2024-07-31 15:59:05
974
原创 代码随想录算法训练营第十三天|递归遍历 迭代遍历 统一迭代 层序遍历
更详细的基础理论:代码随想录二叉树理论基础今日主要学习了通过递归法迭代法来获取二叉树的前中后序遍历数据以及层序遍历法来获取二叉树数据,总的来说相比之前熟悉了很多,尤其是层序遍历后边十道题的训练,看到层序遍历的题目能够很快的反应过来。由于二叉树不太熟因此只看了python的,而且统一迭代法也暂时放过了,java的还没来得及看,后边有时间再补上吧。
2024-07-30 16:33:05
403
原创 代码随想录算法训练营第十一天| 150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元素
1. 使用栈。1. 使用队列,队列是个降序的队列。2. 每次入队,需要比较当前入队的数据是不是比队尾数据大,是的话将队尾数据pop,直到小于队尾数据,然后入队。3. 每次进入下一个窗口的时候就要把上一个窗口中的第一个元素出队,这个时候如果要出队的元素等于队首元素即前一个窗口的最大值,这个时候就出队,否则不用出队,因为在入队过程中,小于队首的数据已经出队了。4. 最后形成的这个队列队首数据都是当前窗口的最大值。python使用的是deque双端队列,java使用的是LinkedList构造的双端队列。
2024-07-28 17:32:08
987
原创 代码随想录算法训练营第十天| 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
1. 使用两个栈,一个作为输入栈,一个作为输出栈。1. 使用两个队列pop的时候,将deque_in中n-1(n为队列的大小)元素依次出队列并放到deque_out中;将deque_in中剩下的元素出队列作为返回值;交换deque_in和deque_out。2. 使用一个队列pop的时候,将队列中的n-1个元素依次出队列并添加到队列尾部,然后再pop出元素作为返回值。以什么时候不能匹配来分情况:1. 字符串里左方向的括号多余了 ,eg:"(()[]"。
2024-07-27 21:15:30
830
原创 代码随想录算法训练营第九天|151.翻转字符串里的单词 卡码网:55.右旋转字符串 28. 实现 strStr() 459.重复的子字符串
不要使用辅助空间,空间复杂度要求为O(1),但是python和java都没法做到。卡哥思路(暂时没使用这种思路解题,等着后边如果二刷的话再来看这种思路的代码编写吧)移除多余空格将整个字符串反转将每个单词反转我的思路使用split进行分割字符串使用双指针进行翻转1. python直接切片获取两部分2. java 先转char[],再整个数组翻转,最后前后两部分分别翻转(翻转方法使用的是双指针)。1. KMP算法:主要用在字符串匹配场景,可以避免从头开始匹配。
2024-07-25 18:30:46
1026
原创 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 卡码网:54.替换数字
1. 注意本题考查的其实就是reverse的操作,所以不能直接使用python/java的库函数2. 使用双指针法1. 双指针反转1. python可以直接遍历进行数据的替换。2. java的话需要先将字符串转换成数组,然后统计数字个数,接着创建新的数组然后赋值,最后再转换成字符串。原以为字符串自己比较熟悉,回顾这三道题,除了最后一道题对java中数据类型存在盲点外其余部分思路还是有的,但是做起题来好像也没那么顺手,也踩坑了有一些细节的地方需要注意,都在上边注意中备注了,看来简单的题目也不能大意呢。
2024-07-25 13:37:25
978
原创 代码随想录算法训练营第七天|454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
1. 使用哈希表。2. 前两个数组的和以及出现的次数作为键值对先存储。3. 检查后两个数组和的相反数有没有在哈希表中出现过,出现则获取次数。1. 解题思路和有效的字母异位词解法类似,使用数组(由于字符是有范围的,所以可以定义一个常量大小的数组,很大程度降低了空间复杂度)。1. 先对数组排序。2. 使用双指针法寻找当前和nums[i] 和为0的组合。3. 注意去重:1)对nums[i]去重;2)当找到满足和为0的三个数以后对下一个nums[left]和nums[right去重]。1. 使用指针法。
2024-07-23 20:44:17
1089
原创 代码随想录算法训练营第六天|242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
也被称为散列表,用于实现关联数组或字典的抽象数据类型。通过哈希函数将键(key)转换成一个数组的索引,从而快速存取与该键相关的值。1. 可以使用数组,时间复杂度和空间复杂度都较低。2. 如果使用python字典或者java中的hashmap的话,如果字符串的长度很大的话时间和空间的复杂度都会有明显的增加。1. 可以使用字典和集合的组合2. 可以使用数组由于题目中设置了数值范围1. 使用集合,利用和如果不是快乐数的话会循环出现。1. 使用哈希表(python 字典,java HashMap)
2024-07-23 11:50:58
736
原创 代码随想录算法训练营第四天|24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II
添加虚拟头节点。梳理两两交换的过程,注意这里需要用到两个tmp中间量保存数据,交换的过程看看卡哥画的图形,简单明了。添加虚拟头节点算法的复杂度: 时间复杂度:O(n),空间复杂度:O(1)。卡哥还写了递归算法,我就暂时没看了,后边再刷题的时候再看吧。1.使用双指针,快慢指针。2. 注意点:1)要使用虚拟头节点,这样如果实际删除的是头节点也会比较方便;
2024-07-20 15:34:52
721
原创 代码随想录算法训练营第三天|203.移除链表元素 707.设计链表 206.反转链表
链表是一种线性数据结构,其中元素不是在内存中连续存放的,而是通过节点之间的链接来组织。每个节点包含两部分:一部分是存储数据的区域,另一部分是一个指针,指向链表中的下一个节点。最后一个节点的指针通常为null,表示链表的结束。代码随想录203链表移除元素代码随想录707设计链表代码随想录206.反转链表。
2024-07-19 19:57:35
1122
原创 代码随想录算法训练营第二天| 977.有序数组的平方 、 209.长度最小的子数组
滑动窗口,就是不断的调节子序列的起始位置和终止位置;时间复杂度O(n),空间复杂度O(1)。
2024-07-18 21:56:30
223
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
主要注意数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。
2024-07-18 21:10:45
422
原创 开启我的博客之旅
今天,打算开启我的博客之旅了,其实不知道从何开始,最近也是比较迷茫的状态,有时候还会怀疑自己,可是无论如何积极向上的心不曾有过动摇,偶然间发现了代码随想录知道了卡哥,很喜欢,加上自己也没有好好学过算法,那就从今天这里开始吧积跬步,希望未来的某一天我可以至千里!
2024-07-18 15:07:48
132
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人