- 博客(32)
- 收藏
- 关注
原创 代码随想录算法训练营第三十六天 | 435. 无重叠区间,763.划分字母区间,56. 合并区间
此时问题就是要求非交叉区间的最大个数。如图:区间,1,2,3,4,5,6都按照右边界排好序。当确定区间 1 和 区间2 重叠后,如何确定是否与区间3也重叠呢?就是取区间1和区间2右边界的最小值,因为这个最小值之前的部分一定是 区间1和区间2的重合部分,如果这个最小值也触达到区间3,那么说明 区间 1,2,3都是重合的。接下来就是找大于区间1结束位置的区间,是从区间4开始。区间4结束之后,再找到区间6,所以一共记录非交叉区间的个数是三个。总共区间个数为6,减去非交叉区间的个数3。
2023-11-16 12:03:08
63
原创 代码随想录算法训练营第三十五天 | 860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球
整个插入过程如下:排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2],[4,4]]
2023-11-15 13:35:05
65
原创 代码随想录算法训练营第三十四天 | 1005. K次取反后最大化的数组和,134. 加油站,135. 分发糖果
1005. K次取反后最大化的数组和。
2023-11-14 12:12:43
53
原创 代码随想录算法训练营第三十二天 | 122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II
如图:i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。而 cover 每次只取 max(该元素数值补充后的范围, cover 本身范围)。如果 cover 大于等于了终点下标,直接 return true 就可以了。
2023-11-14 11:24:24
27
原创 代码随想录算法训练营第三十一天 | 贪心算法理论基础,455.分发饼干,376. 摆动序列,53. 最大子序和
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。
2023-11-13 09:59:06
38
原创 代码随想录算法训练营第二十九天 | 491.递增子序列,46.全排列,47.全排列 II
本题给出的示例,还是一个有序数组 [4, 6, 7, 7],这更容易误导大家按照排序的思路去做了。为了有鲜明的对比,我用[4, 7, 6, 7]这个数组来举例,抽象为树形结构如图:1. 递归函数参数本题求子序列,很明显一个元素不能重复使用,所以需要startIndex,调整下一层递归的起始位置。代码如下:2. 终止条件本题其实类似求子集问题,也是要遍历树形结构找每一个节点,所以和求子集问题一样,可以不加终止条件,startIndex每次都会加1,并不会无限递归。但本题收集结果有所不同,题目要求递增子序列大小
2023-11-08 12:03:52
25
原创 代码随想录算法训练营第二十七天 | 39. 组合总和,40.组合总和II,131.分割回文串
在处理组合问题的时候,递归参数需要传入startIndex,表示下一轮递归遍历的起始位置,这个startIndex就是切割线。
2023-11-06 10:31:19
29
原创 代码随想录算法训练营第二十四天 | 回溯算法理论基础,77. 组合
回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯。回溯是递归的副产品,只要有递归就会有回溯。所以回溯函数也就是递归函数,指的都是一个函数。
2023-11-03 14:28:49
60
原创 代码随想录算法训练营第二十三天 | 669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树
2. 确定递归终止条件这里定义的是左闭右闭的区间,所以当区间 left > right的时候,就是空节点了。代码如下:3. 确定单层递归的逻辑首先取数组中间元素的位置,不难写出。
2023-11-03 13:51:31
33
原创 代码随想录算法训练营第二十二天 | 235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点
235. 二叉搜索树的最近公共祖先。
2023-11-03 13:20:44
30
原创 代码随想录算法训练营第二十一天 | 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先
求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。要理解如果返回值left为空,right不为空为什么要返回right,为什么可以用返回right传给上一层结果。
2023-11-03 11:56:39
23
原创 代码随想录算法训练营第二十天 | 654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树
654.最大二叉树654.最大二叉树。
2023-11-03 08:56:41
25
原创 代码随想录算法训练营第十八天 | 513.找树左下角的值,112. 路径总和,113.路径总和II,106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树
513.找树左下角的值。
2023-11-01 14:59:03
25
原创 代码随想录算法训练营第十六天 | 104.二叉树的最大深度,559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数
完全二叉树(一)如图:完全二叉树(二)如图:可以看出如果整个树不是满二叉树,就递归其左右孩子,直到遇到满二叉树为止,用公式计算这个子树(满二叉树)的节点数量。这里关键在于如何去判断一个左子树或者右子树是不是满二叉树呢?
2023-10-30 12:52:43
25
原创 代码随想录算法训练营第十五天 | 层序遍历,226.翻转二叉树,101.对称二叉树
层序遍历层序遍历层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。需要借用一个辅助数据结构即来实现,
2023-10-25 11:07:56
37
原创 代码随想录算法训练营第十四天 | 二叉树理论基础,递归遍历,迭代遍历,统一迭代
二叉树的递归遍历这里帮助大家确定下来递归算法的三个要素。每次写递归,都按照这三要素来写,可以保证大家写出正确的递归算法!确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定每一层递归需要处理的信息。
2023-10-24 09:50:47
37
原创 代码随想录算法训练营第十一天 | 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
20. 有效的括号20. 有效的括号。
2023-10-23 04:49:25
34
原创 代码随想录算法训练营第十天 | 栈与队列理论基础,232.用栈实现队列,225. 用队列实现栈
232.用栈实现队列栈与队列理论基础栈和队列是STL(C++标准库)里面的两个数据结构。C++标准库是有多个版本的,要知道我们使用的STL是哪个版本,才能知道对应的栈和队列的实现原理。那么来介绍一下,三个最为普遍的STL版本:HP STL 其他版本的C++ STL,一般是以HP STL为蓝本实现出来的,HP STL是C++ STL的第一个实现版本,而且开放源代码。P.J.Plauger STL 由P.J.Plauger参照HP STL实现出来的,被Visual C++编译器所采用,不是开源的。
2023-10-20 12:54:28
49
1
原创 代码随想录算法训练营第九天 | 28. 实现 strStr(),459.重复的子字符串
KMP是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。KMP主要应用在字符串匹配上。KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。所以如何记录已经匹配的文本内容,是KMP的重点,也是next数组肩负的重任。next数组就是一个前缀表(prefix table)。前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。比如要在文本串:aabaabaafa 中查找
2023-10-20 11:43:41
103
1
原创 代码随想录算法训练营第八天 | 344.反转字符串,541. 反转字符串II,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer 58-II.左旋转字符串
344.反转字符串344.反转字符串。
2023-10-19 12:18:37
34
原创 代码随想录算法训练营第七天 | 454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和
454.四数相加II454.四数相加II。
2023-10-18 13:06:43
55
1
原创 代码随想录算法训练营第六天 | 哈希表理论基础,242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和
哈希表理论基础哈希表理论基础例如要查询一个名字是否在这所学校里。要枚举的话时间复杂度是O(n),但如果使用哈希表的话, 只需要O(1)就可以做到。
2023-10-17 12:36:59
26
原创 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点,19. 删除链表的倒数第N个节点,160. 链表相交,142. 环形链表II,链表总结
24. 两两交换链表中的节点24. 两两交换链表中的节点。
2023-10-15 07:07:48
103
原创 代码随想录算法训练营第三天|链表理论基础,203.移除链表元素,707.设计链表,206.反转链表
链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。链表是通过指针域的指针链接在内存中各个节点。初始化节点:设置一个虚拟头结点。使用C++编程语言,不要忘了还要从内存中删除移除的节点。这道题目设计链表的五个接口:首先定义一个cur指针,指向头结点,再定义一个pre指针,初始化为null。
2023-10-13 12:49:54
325
原创 代码随想录算法训练营第二天 | 977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵,数组总结
977.有序数组的平方977.有序数组的平方。
2023-10-12 13:40:41
488
1
原创 代码随想录算法训练营第一天 | 数组理论基础,704. 二分查找,27. 移除元素
数组理论基础数组理论基础需要注意的是正总结由于数组是紧凑连续存储,所以可以随机访问,通过索引快速找到对应元素,而且相对节约存储空间。但正因为连续存储,内存空间必须一次性分配够,如果需要扩容,需要重新分配一块更大的空间,再把数据复制过去,时间复杂度O(n)。如果想在数组中间进行插入和删除,每次必须搬移后面所有的数据以保持连续,时间复杂度O(n)。704. 二分查找。
2023-10-11 12:29:39
742
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人