- 博客(23)
- 收藏
- 关注
原创 代码随想录算法训练营第27天 |39. 组合总和 40.组合总和II 131.分割回文串
如果是一个集合来求组合的话,就需要startIndex;如果是多个集合取组合,各个集合之间相互不影响,那么就不用startIndex。一些同学可能遇到题目比较难,但是不知道题目难在哪里,反正就是很难。其实这样还是思维不够清晰,这种总结的能力需要多接触多锻炼。难度有点大,主要是理解切割位置和遍历的i位置之间的关系,以及回文的判断,要执行剪枝操作,不然执行用例会报超时。要在搜索的过程中就去掉重复组合。
2024-02-20 18:02:11 287
原创 代码随想录算法训练营第25天 |216.组合总和III、17.电话号码的字母组合
总结感想:想通很重要:如何把数字组合转换为回溯树的宽度和深度。for循环的时候,起始位置的确定(每次都从0开始),深度(index)代码细节需要注意:for循环中的终止条件是<=9;pop_back();17.电话号码的字母组合。216.组合总和III。
2024-02-20 15:41:44 280
原创 代码随想录算法训练营第24天 |回溯理论基础、77. 组合
backtracking(路径,选择列表);for(循环遍历,本层集合的元素) {void backtracking(参数) {if(终止条件) {
2024-02-20 13:50:24 293
原创 代码随想录算法训练营第23天 |669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、● 538.把二叉搜索树转换为累加树 、总结
需要关注的地方在于:是否要返回值,是否要遍历整棵树,返回值和遍历树的关系,前中后序遍历等。,一定会对递归函数返回值的作用深有感触。os:其实还没有很深刻的感触)总结:默认都是从数组中间位置取值作为节点元素,一般不会随机取。在终止条件的时候,left>right,是左闭右闭。总结:要考虑到删除节点的左子树和右子树。总结:遍历整棵树,不需要返回值。(相信大家如果仔细看了。
2024-01-03 17:09:06 460 1
原创 代码随想录算法训练营第21天|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
总结:遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值。难点在于如何用两个指针(pre, cur)来解决。总结:区别于二叉搜索树的公共祖先。还有要复习下什么时候需要返回值,什么时候不需要返回值,什么时候需要搜索整棵树,什么时候只搜索一边。总结:代码实现起来有点难,尤其是在处理比较前后节点的时候,count的更新以及maxCount的更新。
2024-01-03 11:21:58 516 1
原创 代码随想录算法训练营第22天 |235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、● 450.删除二叉搜索树中的节点
总结:回溯从底向上搜索,遇到一个节点的左子树里有p,右子树里有q,那么当前节点就是最近公共祖先。重点在于最近的公共祖先方法,以及是搜索一边还是搜索整棵树。总结:如何在递归的时候,接住左右子树的返回值。
2023-12-31 16:21:32 360
原创 代码随想录算法训练营第20天|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
递归函数的返回值是什么?是 左子树如果搜索到了val,要将该节点返回。如果不用一个变量将其接住,那么返回值不就没了。左子树为空的时候返回右子树,右子树为空的时候返回左子树。建议避免 初始化最小值,如下方法取到最左面节点的数值来比较。总结:中左右序列,先构造中间节点,然后递归左子树和右子树。总结:递归结束条件,忽略了如果root为空的情况。700.二叉搜索树中的搜索。容易出问题的在于左闭右开。98.验证二叉搜索树。
2023-12-31 15:12:17 476
原创 代码随想录算法训练营第18| 513.找树左下角的值天、112. 路径总和 113.路径总和ii、106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
难点在于理解终止条件和处理逻辑:终止条件不再是cur为null的时候,或者叶子节点的时候,而是总和为sum的时候。查找整棵树的路径这个题目的终止条件是为cur为null的时候,或者到达叶子节点的时候。另外,到达终止条件的时候,是直接返回的时候,那么返回什么值呢?处理逻辑上,就是左右子树的处理,处理的时候需要把当前节点的值先处理掉,然后再去递归。递归完了,别忘记回溯,一一对应。总结:递归有点难理解终止条件和单层处理逻辑中的回溯,所以先用迭代法(层序遍历)实现容易很多:找最后一层的从左到右第一个节点。
2023-12-22 19:24:55 337
原创 代码随想录算法训练营第17天|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
所以判断左叶子节点需要通过父节点来判断,即parient->left!=null && parient->left->left == null && parient->left->right==null.总结:在处理终止条件的时候,容易习惯写成cur==NULL,而不是判断叶节点。2. 找到了该节点的左节点是叶子节点时的处理逻辑。总结:难点在于每次递归返回的时候,有个+1的动作用来推动高度的增加。3. 左子树就是左叶子节点的逻辑。难点:1.终止条件:空节点,以及叶节点时返回0,终止。
2023-12-22 16:21:58 474
原创 代码随想录算法训练营第16天|104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、● 222.完全二叉树的节点个数
104,559:可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。总结:递归三部曲,重点在于处理逻辑上:比较左右子树的高度,然后返回较大值+1;总结:左右子树都为空才是叶子结点。
2023-12-19 18:58:58 467 1
原创 代码随想录算法训练营第15天|10 层序遍历 、226.翻转二叉树、101.对称二叉树 2
总结:思路很重要,难点在于怎么将一棵树,用两棵树的形式比对。思路:需要借用一个辅助数据结构即队列来实现,本题遍历只能是“后序遍历”。思路:递归反转左子树,右字数。总结:前序遍历和后序遍历。101.对称二叉树 2。
2023-12-18 19:12:46 491 1
原创 代码随想录算法训练营第14天 |
中序遍历:指针和栈,指针遍历到最左边的子树底部,依次入栈,然后再处理根节点,最后再入栈又子树节点。后序遍历:(中左右)前序遍历-->中右左-->(反转)左右中。前序遍历:栈先处理根节点,然后依次将右节点和左节点入栈。手写代码中的判断条件最容易出错!递归遍历、迭代遍历、统一遍历。
2023-12-14 18:43:37 45 1
原创 代码随想录算法训练营第13天|239. 滑动窗口最大值、347.前 K 个高频元素
感想总结:挺难得,之前都没有用过优先级队列这种数据结构。感想总结:一刷理解思路,待2-3刷。347.前 K 个高频元素。239. 滑动窗口最大值。
2023-12-13 18:42:53 37
原创 代码随想录算法训练营第11天 |20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
思路:用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。感想总结:如何处理字符串为数字:stoi, stod, stoll,效率高的推荐使用istringstream();适合用栈操作运算:遇到数字则入栈;思路:逆波兰表达式:是一种后缀表达式,所谓后缀就是指运算符写在后面。感想总结:自己的代码和思路是先左括号入栈,右括号进行比较。感想总结:消消乐,写代码过程中,没有考虑栈为空的情况。1047. 删除字符串中的所有相邻重复项。
2023-12-11 15:04:22 46 1
原创 代码随想录算法训练营第十天 | 232.用栈实现队列 、 225. 用队列实现栈
感想总结:1、在peek()函数时,又重新写了一遍pop,参考解析,其实可以使用已经有的pop()函数。2、我是用的两个栈定义为了private。感想总结:重点在pop()实现.与解析不一样的地方在于,自己代码中开始用到了back(),但是对于pop()处理过程实质是一样的。,这里要注意输入栈和输出栈的关系。232.用栈实现队列。225.用队列实现栈。
2023-12-11 11:12:04 34 1
原创 代码随想录算法训练营第九天 |28. 实现 strStr()、459.重复的子字符串、字符串总结、双指针回顾
感想总结:烧脑KMP,第一遍先了解,准备N刷。感想总结:烧脑KMP,第一遍先了解,准备N刷。459.重复的子字符串。
2023-12-08 18:18:30 45
原创 代码随想录算法训练营第八天 |344.反转字符串、● 541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串
思路:双指针法,从后向前,如下:i指向新长度的末尾,j指向旧长度的末尾。解法如果没接触过的话,应该会想不到,应该也做不出来。reverse 函数.还有if里边的条件是i+k。感想总结:没啥感想,干就是了。344. 541反转字符串。151,55各种转字符串。
2023-12-08 17:47:27 44
原创 代码随想录算法训练营第六天 | 454.四数相加II 、383. 赎金信 、15. 三数之和 、18. 四数之和
感想总结:第一想法是将前两个数组求和,然后在与后两个数组和比较。没有想到的是利用map,将value值作为之和出现的次数。感想总结:没思路,或者暴力算法。即使之前已经做过一次也忘得一干二净。也能用哈希法,但用哈希法会很麻烦,双指针法才是正解,哈希法很麻烦。用26个长度数组解决。思路:map,空间换时间。感想总结:同15三数之和。
2023-12-07 23:40:50 43
原创 代码随想录算法训练营第五天 | 242.有效的字母异位词 、 349. 两个数组的交集 、 202. 快乐数 、1. 两数之和
感想总结:首先想到的是暴力算法,结果发现编程复杂,并且记录每个数组中的个数也很麻烦(用的是key,value),发现比较起来好复杂,还得再弄一次循环。看了解析,瞬间emoo了,为啥自己没想到这种方法!感想总结:map使用不熟练,插入的时候需要pair感想总结:没啥思路,完全借鉴解析才抄袭做出来。242.有效的字母yiwei。思路:使用集合set处理。思路:破解无限循环(
2023-12-06 13:41:53 45 1
原创 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点 、142.环形链表II
比如头两个节点和最后的两个节点。以及保存哪两个临时节点,以及终止条件的判断。感想总结:如果说是删除倒数第N个节点,那么这个链表是至少有N个节点的。因此使用两个指针,来找到倒数第N个节点。感想总结:这个题的重点在于怎么去理解相交。此题的相交是两个链表从交点开始往后的节点都相同,所以可以从后往前寻找。双指针的操作,要注意,删除第N个节点,那么我们当前遍历的指针一定要指向 第N个节点的前一个节点。感想总结:这个题需要具备数学相关知识,放弃了,后边再做。19.删除链表的倒数第N个节点。两两交换链表中的节点。
2023-12-05 22:34:39 41
原创 第三天/ 203.移除链表元素 ,707.设计链表 ,206.反转链表
感想和总结:1、在addTail的时候,没有考虑链表本身如果为空的情况。2、在删除节点操作时,需要用一个临时节点来指向要删除的这个节点,并且最后delete后,要赋值nullptr;感想和总结:1、对于head的判断,放在了整个的处理循环里边,而不是外边,导致出现空指针异常。2、while条件的判断,是p&&p->next,而不是||,这是因为p已经判断过不可能为val,只会是判断p->next是否为val.感想和总结:思路是正确的,即用两个指针改变next指向,但是眼高手低,代码一堆错误。
2023-12-03 14:28:04 27 1
原创 代码随想录算法训练营第二天 | 977.有序数组的平方 、209.长度最小的子数组、59.螺旋矩阵II
做题感想和总结:首次做题,是分三种情况:全部为整数,全部为负数,有正有负。对于第三种情况,又采用逆排序法将负数按照绝对值从小到大排序,然后又用快排法进行全部排序,最后平方即可。错误的原因在于1,用queue来表示滑动窗口,2,没有考虑最后i==nums.size()的时候,for循环已经终止,但是queue还没有找到最佳的答案,即还没操作完,循环就提前终止了 3,没有用下标控制queue的长度。做题感想和总结:暂时放弃没有做,自己完全没有思路,并且也不想马上就参考别人的思路,我再花点时间自己琢磨下。
2023-12-02 23:06:57 30
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
容易出错的地方在于计算mid值的时候,没有将left值基准加进去。刚开始没想到用双指针,并且在循环的时候,容易出现访问溢出错误。左闭右开,左闭右闭 两种区间规则 写出二分法。思路: 递归操作,边界条件,下标从0开始。怎么更好的设计出返回值。
2023-11-30 20:00:22 34
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人