![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
训练营二刷
文章平均质量分 83
我想喝冰阔乐
这个作者很懒,什么都没留下…
展开
-
day37 | 738.单调递增的数字、968.监控二叉树
贪心的感觉就是去找规律,找局部最优情况,只要能推出全局最优,就可以按照思路尝试一下。原创 2023-09-08 17:21:22 · 214 阅读 · 0 评论 -
day36 | 435. 无重叠区间、763.划分字母区间、56. 合并区间
1、vector的操作,例如取最后一个 result.back() 这些还需要多加熟悉。2、遇到区间问题,可以考虑先排序。原创 2023-09-07 11:53:57 · 331 阅读 · 0 评论 -
day35 | 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
1、区间问题,很多都可以想想是不是需要进行先排序再处理。2、遇到两个维度权衡的时候,一定要先确定一个维度,再确定另一个维度。如果两个维度一起考虑一定会顾此失彼。3、遇到感觉没有思路的题目,可以静下心来把能遇到的情况分析一下,只要分析到具体情况了,一下子就豁然开朗了。原创 2023-09-05 15:16:18 · 259 阅读 · 0 评论 -
day34 | 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果
贪心如果局部有两种情况,或者多种贪心策略,可以分开来考虑,不然容易顾此失彼。原创 2023-09-05 11:56:14 · 65 阅读 · 0 评论 -
day32 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
1、贪心类问题,有时候没有特定的写法。看能不能想到如何从局部推导到全局。2、买卖股票类动态规划类问题,每天的状态需要设置成两个不同的。原创 2023-09-01 10:00:29 · 67 阅读 · 0 评论 -
day31 | 455.分发饼干、376. 摆动序列、53. 最大子序和
1、贪心算法确实比较看能不能想到思路。2、好像很多都能转成动态规划去做。原创 2023-08-28 13:53:54 · 288 阅读 · 0 评论 -
day29 | 491.递增子序列、46.全排列、47.全排列 II
1、排列问题中,由于用不到startindex,所以只能新建一个used数组来进行重复记录。2、一般来说:组合问题和排列问题是在树形结构的叶子节点上收集结果,而子集问题就是取树上所有节点的结果。每层都是从0开始搜索而不是startIndex需要used数组记录path里都放了哪些元素了4、数组,set,map都可以做哈希表,而且数组干的活,map和set都能干,但如果数值范围小的话能用数组尽量用数组。原创 2023-08-27 12:01:09 · 181 阅读 · 0 评论 -
day30| 332.重新安排行程、51. N皇后、37. 解数独
1、回溯的模板void backtracking(参数) {if (终止条件) {存放结果;return;for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表);// 递归回溯,撤销处理结果2、组合问题。用递归控制for循环嵌套的数量!for循环横向遍历,递归纵向遍历,回溯不断调整结果集。3、如果是一个集合来求组合的话,就需要startIndex。原创 2023-08-26 17:41:12 · 114 阅读 · 0 评论 -
day28 | 93.复原IP地址、78.子集、 90.子集II
1、子集是收集树形结构中树的所有节点的结果。而组合问题、分割问题是收集树形结构中叶子节点的结果。2、注意对于去重的方法。可以使用used数组或者利用startIndex进行去重。原创 2023-08-25 15:03:22 · 45 阅读 · 0 评论 -
day27 | 39. 组合总和、 40.组合总和II、131.分割回文串
1、剪枝操作,可以是在for循环里面,也可以在开头的结束判断处。2、startindex 对于一个集合里面求取,则需要。否则,不需要。如果for循环传入的是 startindex 而不是 i, 则求的是排列数而不是组合数。原创 2023-08-24 16:15:15 · 221 阅读 · 0 评论 -
day25 | 216.组合总和III、 17.电话号码的字母组合
1、回溯法中递归函数参数很难一次性确定下来,一般先写逻辑,需要啥参数了,填什么参数。2、这种利用二位数组下标来存放元素的方法非常值得学习。本题最主要的是如何根据元素取到对应的循环。原创 2023-08-23 21:44:41 · 151 阅读 · 0 评论 -
day24 | 理论基础、77. 组合
今日学到了:1、回溯三部曲。确定返回值及参数确定终止条件确定单层的遍历过程2、for循环里面相当于是宽度,for循环里面的回溯相当于是深度。3、剪枝操作一般都是在for循环那里,(n - (k - path.size()) + 1)。即选择搜索的极限位置。原创 2023-08-23 18:01:36 · 64 阅读 · 0 评论 -
day23 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
看到二叉树,看到递归,想:返回值、参数是什么?终止条件是什么?单层逻辑是什么?涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。原创 2023-08-22 11:15:43 · 66 阅读 · 0 评论 -
day22 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
二叉搜索树添加节点只需要在叶子上添加就可以的,不涉及到结构的调整,而删除节点操作涉及到结构的调整。原创 2023-08-21 11:21:14 · 66 阅读 · 0 评论 -
day21 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
二叉搜索树的特性,经常和双指针法一起使用。迭代法和递归法的一般写法。原创 2023-08-20 11:03:44 · 90 阅读 · 0 评论 -
day20 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
1、使用迭代法同时处理两棵树就是要把这两棵树的节点同时加入队列进行比较。2、二叉搜索树要尽量用中序遍历,利用二叉搜索树的特性。用一个指针记录前一个节点,是个很好的思路。3、注意类似用数组构造二叉树的题目,每次分隔尽量不要定义新的数组,而是通过下标索引直接在原数组上操作,这样可以节约时间和空间上的开销。4、一般情况来说:如果让空节点(空指针)进入递归,就不加if,如果不让空节点进入递归,就加if限制一下, 终止条件也会相应的调整。原创 2023-08-19 11:33:17 · 113 阅读 · 1 评论 -
day18 | 513.找树左下角的值、112. 路径总和 113.路径总和ii、构造二叉树
就算是思路清晰, 代码写出来一定是各种问题,所以一定要加日志来调试,看看是不是按照自己思路来切割的,不要大脑模拟,那样越想越糊涂。原创 2023-08-18 12:02:55 · 70 阅读 · 0 评论 -
day17 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
1、c++写代码中,如果最后的处理节点在空节点处,则遍历的时候不用加 if(cur→left) 这样的判断条件。如果处理的节点是在叶子节点,则空节点不进入处理的逻辑,需要加判断条件。2、使用to_string函数可以将数字转换为字符串,返回值为转换完的字符串。默认情况下,to_string默认输出6位小数,但这不一定是您想要的。C ++ 11引入了std :: to_string的另一个重载版本,该版本接受一个小数位数参数。头文件:include<cstring。原创 2023-08-17 12:03:48 · 295 阅读 · 0 评论 -
day16 | 104.二叉树的最大深度、111.二叉树的最小深度、 222.完全二叉树的节点个数
递归和层序遍历以及掌握的还可以了。主要是具体问题需要具体分析,稍微修改下代码。原创 2023-08-17 11:11:40 · 50 阅读 · 0 评论 -
day15 | 层序遍历、 226.翻转二叉树、101. 对称二叉树
写递归的时候,注意三部曲:1、确定递归函数的参数和返回值2、确定终止条件3、确定单层递归的逻辑。原创 2023-08-16 17:27:05 · 48 阅读 · 0 评论 -
day 14 | 递归遍历、迭代遍历、统一迭代
今天主要是了解了二叉树的几种遍历方式。递归遍历时最简单的。迭代遍历,利用栈来进行遍历,但是集中遍历方式的风格不太统一。统一迭代在迭代遍历的基础上,添加了一个空指针作为标记,使得整体风格比较统一。重点掌握递归和统一。原创 2023-08-16 16:20:31 · 70 阅读 · 0 评论 -
day13 | 239. 滑动窗口最大值、347.前 K 个高频元素
队列问题,还是很难的。原创 2023-08-16 14:25:19 · 36 阅读 · 0 评论 -
day 11 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
主要把栈的相关题刷了一下。栈对于成对的符号检测,逆波兰表达式运算应用广泛。栈一个特征点就是能知道遍历的上一个元素的值,用于后序比较。原创 2023-08-15 21:06:49 · 97 阅读 · 0 评论 -
day 10 | 232.用栈实现队列、 225. 用队列实现栈
很多算法题目主要是对知识点的考察和教学意义远大于其工程实践的意义,所以面试题也是这样!原创 2023-08-14 11:25:56 · 61 阅读 · 0 评论 -
day9 | 28. 实现 strStr()、459.重复的子字符串
字符串类类型的题目,往往想法比较简单,但是实现起来并不容易,复杂的字符串题目非常考验对代码的掌控能力。双指针法是字符串处理的常客。KMP算法是字符串查找最重要的算法。原创 2023-08-14 11:04:27 · 68 阅读 · 0 评论 -
day8 | 344.反转字符串、541. 反转字符串II、 剑指Offer 05.替换空格、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串
1、字符串的操作经常需要使用到双指针和反转的思想。2、还是需要记住一些库函数的。常见的字符串操作函数总结:(参考:https://blog.csdn.net/Cyril_KI/article/details/106165976)1、构造函数:string str:空串,string s(str)复制str到s,string s(num,c)生成由num个c字符构成的字符串。2、插入函数:有两种push_back()和insert(),后者比较常用。原创 2023-08-14 09:03:26 · 23 阅读 · 0 评论 -
day7 | 454.四数相加II、383. 赎金信、 15. 三数之和、18. 四数之和
有时候哈希表不一定就是比较简单的。原创 2023-08-11 18:13:27 · 145 阅读 · 0 评论 -
day6 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
重点:1、为什么会想到用和哈希表?当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。2、关于哈希表的结构。数组,当题目限制了数值的具体大小,则可以用数组的哈希结构。set(集合)有去重的作用。而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。此时可以考虑setmap(映射) 有记录key和value的功能。需要使用 key value结构来存放,那么使用map正合适。3、map中,find查找的是key值。原创 2023-08-11 17:04:14 · 138 阅读 · 0 评论 -
day4 | 24. 两两交换链表中的节点、 19.删除链表的倒数第N个节点、 面试题 02.07. 链表相交、 142.环形链表II
链表相交那道题没想明白,为啥相交节点之后的长度一定相等。不过后一种方法的思路挺清晰的。进度落后,需要加快进度。原创 2023-08-07 17:13:40 · 89 阅读 · 0 评论 -
day3 | 203.移除链表元素、707.设计链表、206.反转链表
链表设置虚拟头节点,可以极大方便操作。原创 2023-08-04 18:57:45 · 204 阅读 · 0 评论 -
day 2 |977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
双指针方法yyds模拟题的话只能是找到规律来做了。原创 2023-08-03 18:00:09 · 414 阅读 · 0 评论 -
day1 | 704. 二分查找、27. 移除元素
1、二分查找边界情况要明确2、双指针法很巧妙。但是要把情况都汇总清楚。原创 2023-08-03 14:51:09 · 301 阅读 · 0 评论