![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码随想录算法训练营
文章平均质量分 96
kennyS_ss
这个作者很懒,什么都没留下…
展开
-
代码随想录算法训练营_day20
剩下的情况,就是cur节点在区间(p->val <= cur->val && cur->val <= q->val)或者 (q->val <= cur->val && cur->val <= p->val)中,那么cur就是最近公共祖先了,直接返回cur。如图,我们从根节点搜索,第一次遇到 cur节点是数值在[q, p]区间中,即 节点5,此时可以说明 q 和 p 一定分别存在于 节点 5的左子树,和右子树中。终止条件就是找到遍历的节点为null的时候,就是要插入节点的位置了,并把插入的节点返回。原创 2024-08-19 13:06:20 · 662 阅读 · 0 评论 -
代码随想录算法训练营_day18
那么我们来说一说,如果 root == q,或者 root == p,说明找到 q p ,则将其返回,这个返回值,后面在中节点的处理过程中会用到,那么中节点的处理逻辑,下面讲解。但我们还要返回最近公共节点,可以利用上题目中返回值是TreeNode * ,那么如果遇到p或者q,就把q或者p返回,返回值不为空,就说明找到了q或者p。判断逻辑是 如果递归遍历遇到q,就将q返回,遇到p 就将p返回,那么如果 左右子树的返回值都不为空,说明此时的中节点,一定是q 和p 的最近祖先。原创 2024-08-17 11:54:59 · 443 阅读 · 0 评论 -
代码随想录算法训练营_day16
找到。原创 2024-08-15 14:10:26 · 952 阅读 · 0 评论 -
代码随想录算法训练营_day15
关于根节点的深度究竟是1 还是 0,不同的地方有不一样的标准,leetcode的题目中都是以节点为一度,即根节点深度是1。的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。当然是其左子树高度和其右子树高度的差值。判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int。原创 2024-08-14 19:09:26 · 697 阅读 · 0 评论 -
代码随想录算法训练营_day14
代码随想录算法训练营_day14原创 2024-08-13 12:00:01 · 740 阅读 · 0 评论 -
代码随想录算法训练营_day13
我们以中序遍历为例,使用栈的话,原创 2024-08-12 12:56:45 · 405 阅读 · 0 评论 -
代码随想录算法训练营_day11
寻找前k个最大元素流程如图所示:(图中的频率只有三个,所以正好构成一个大小为3的小顶堆,如果频率更多一些,则用这个小顶堆进行扫描)原创 2024-08-10 08:28:54 · 370 阅读 · 0 评论 -
代码随想录算法训练营_day10
栈(Stack)和队列(Queue)都是Java中常用的数据结构,它们在处理数据时遵循不同的原则。原创 2024-08-09 09:48:50 · 719 阅读 · 0 评论 -
代码随想录算法训练营_day09
KMP的理解方法就是把这一个串自己当作文本串(i)和模式串(j) 发现两者不匹配 那就回退到前缀相同的位置 即数组中前一个下标。next数组存放的元素是某个阶段上重复的元素个数,由于能组成重复元素的长串next数组一定是单调递增的,取next最后一个元素就是最长相同前后缀(即重复的元素个数,记为max),len - max就是最小重复子串长度,如果len能被最小重复字串长度整除,说明长串均可由其构成。原创 2024-08-08 10:29:53 · 684 阅读 · 0 评论 -
代码随想录算法训练营_day08
这一步相当于 s[r] = s[r] ^ s[l],即 s[r] = b ^ (a ^ b)。根据异或的性质,b ^ (a ^ b) = (b ^ b) ^ a = 0 ^ a = a 此时,s[l] = a ^ b,s[r] = a。这一步相当于 s[l] = s[l] ^ s[r],即 s[l] = (a ^ b) ^ a。根据异或的性质,(a ^ b) ^ a = b 此时,s[l] = b,s[r] = a。这一步相当于 s[l] = s[l] ^ s[r],即 s[l] = a ^ b。原创 2024-08-07 08:10:53 · 923 阅读 · 0 评论 -
代码随想录算法训练营_day07
本题是使用哈希法的经典题目,这道题目是四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑有重复的四个元素相加等于0的情况,所以相对于题目18. 四数之和,题目15.三数之和,还是简单了不少!如果本题想难度升级:就是给出一个数组(而不是四个数组),在这里找出四个元素相加等于0,答案中不可以包含重复的四元组,大家可以思考一下,后续的文章我也会讲到的。本题解题步骤:题目信息 383. 赎金信题目链接: https://leetcode.cn/problem原创 2024-08-06 10:47:57 · 699 阅读 · 0 评论 -
代码随想录算法训练营_day06
先看暴力的解法,两层for循环,同时还要记录字符是否重复出现,很明显时间复杂度是 O(n^2)。暴力的方法这里就不做介绍了,直接看一下有没有更优的方式。数组其实就是一个简单哈希表,而且这道题目中字符串只有小写字符,那么就可以定义一个数组,来记录字符串s里字符出现的次数。需要定义一个多大的数组呢,定一个数组叫做record,大小为26 就可以了,初始化为0,因为字符a到字符z的ASCII也是26个连续的数值。为了方便举例,判断一下字符串s= “aee”, t = “eae”。操作动画如下:定义一个数组叫做re原创 2024-08-05 22:34:29 · 763 阅读 · 0 评论 -
代码随想录算法训练营_day04
可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。其实这种情况和n为1的时候 效果是一样的,一样可以通过这个方法找到 环形的入口节点,只不过,index1 指针在环里 多转了(n-1)圈,然后再遇到index2,相遇点依然是环形的入口节点。为什么fast 走两个节点,slow走一个节点,有环的话,一定会在环内相遇呢,而不是永远的错开呢。原创 2024-08-03 12:24:42 · 917 阅读 · 0 评论 -
代码随想录算法训练营_day03
headval。原创 2024-08-02 22:29:28 · 632 阅读 · 0 评论 -
代码随想录算法训练营_day02
找出该数组中满足其总和大于等于 的长度最小的 子数组 ,并返回其长度**。**如果不存在符合条件的子数组,返回 。复杂度分析时间复杂度: O(n^2)空间复杂度: O()解题思路一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。复杂度分析时间复杂度: O(n)空间复杂度: O()解题思路所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。在暴力解法中,是一个for循环滑动窗口的起原创 2024-08-01 13:35:54 · 938 阅读 · 0 评论 -
代码随想录算法训练营_day01
一、模版(认真看看3种情况之间的关系)左右闭区间[a, b]- 循环条件- ⭐- 边界更新操作左闭右开:[a, b)- 循环条件- ⭐(左右相等没意义)- 边界更新操作- ⭐(开区间不需要越位)左开右闭:(a, b](一般不考虑这种情况,前两种已经足够)- 循环条件- ⭐(左右相等没意义)- 边界更新操作- ⭐(开区间不需要越位)二、⭐⭐需要考虑的边界值条件数组为空(nums: [])指针越界(start > length - 1;原创 2024-07-31 16:42:33 · 1028 阅读 · 0 评论