自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 代码随想录算法训练营_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

原创 代码随想录算法训练营_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 442

原创 代码随想录算法训练营_day17

因为是传入了两个树,那么就有两个树遍历的节点t1 和 t2,如果t1 == NULL 了,两个树合并就应该是 t2 了(如果t2也为NULL也无所谓,合并之后就是NULL)。题目中说了输入的数组大小一定是大于等于1的,所以我们不用考虑小于1的情况,那么当递归遍历的时候,如果传入的数组大小为1,说明遍历到了叶子节点了。这表示一个数组大小是1的时候,构造了一个新的节点,并返回。其实本题是同样的道理,我们在寻找一个不符合条件的节点,如果没有找到这个节点就遍历了整个树,如果找到不符合的节点了,立刻返回。

2024-08-16 12:19:15 652

原创 代码随想录算法训练营_day16

找到。

2024-08-15 14:10:26 951

原创 代码随想录算法训练营_day15

关于根节点的深度究竟是1 还是 0,不同的地方有不一样的标准,leetcode的题目中都是以节点为一度,即根节点深度是1。的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。当然是其左子树高度和其右子树高度的差值。判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int。

2024-08-14 19:09:26 697

原创 代码随想录算法训练营_day14

代码随想录算法训练营_day14

2024-08-13 12:00:01 740

原创 代码随想录算法训练营_day13

我们以中序遍历为例,使用栈的话,

2024-08-12 12:56:45 405

原创 代码随想录算法训练营_day11

寻找前k个最大元素流程如图所示:(图中的频率只有三个,所以正好构成一个大小为3的小顶堆,如果频率更多一些,则用这个小顶堆进行扫描)

2024-08-10 08:28:54 370

原创 代码随想录算法训练营_day10

栈(Stack)和队列(Queue)都是Java中常用的数据结构,它们在处理数据时遵循不同的原则。

2024-08-09 09:48:50 719

原创 代码随想录算法训练营_day09

KMP的理解方法就是把这一个串自己当作文本串(i)和模式串(j) 发现两者不匹配 那就回退到前缀相同的位置 即数组中前一个下标。next数组存放的元素是某个阶段上重复的元素个数,由于能组成重复元素的长串next数组一定是单调递增的,取next最后一个元素就是最长相同前后缀(即重复的元素个数,记为max),len - max就是最小重复子串长度,如果len能被最小重复字串长度整除,说明长串均可由其构成。

2024-08-08 10:29:53 683

原创 代码随想录算法训练营_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

原创 代码随想录算法训练营_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

原创 代码随想录算法训练营_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

原创 代码随想录算法训练营_day04

可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。其实这种情况和n为1的时候 效果是一样的,一样可以通过这个方法找到 环形的入口节点,只不过,index1 指针在环里 多转了(n-1)圈,然后再遇到index2,相遇点依然是环形的入口节点。为什么fast 走两个节点,slow走一个节点,有环的话,一定会在环内相遇呢,而不是永远的错开呢。

2024-08-03 12:24:42 916

原创 代码随想录算法训练营_day03

headval。

2024-08-02 22:29:28 632

原创 代码随想录算法训练营_day02

找出该数组中满足其总和大于等于 的长度最小的 子数组 ,并返回其长度**。**如果不存在符合条件的子数组,返回 。复杂度分析时间复杂度: O(n^2)空间复杂度: O()解题思路一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。复杂度分析时间复杂度: O(n)空间复杂度: O()解题思路所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。在暴力解法中,是一个for循环滑动窗口的起

2024-08-01 13:35:54 937

原创 八股学习计划

40天学习计划计算机网络[[Day01-计算机网络]] TCP/IP模型和OSI模型 #计算机网络 #中高频 从输入URL到页面展示发生了什么 #计算机网络 #高频[[Day02-计算机网络]] HTTP请求报文和响应报文是怎样的 #计算机网络 #中高频 HTTP请求方式有哪些 #计算机网络 #中高频 GET请求和POST请求的区别 #计算机网络 #高频[[Day03-计算机网络]] HTTP请求中常见的状态码 #计算机网络 #中高频 什么是强缓存和协商缓存 #计算机网

2024-07-31 22:06:56 671

原创 Day01

八股day01

2024-07-31 21:38:29 291

原创 代码随想录算法训练营_day01

一、模版(认真看看3种情况之间的关系)左右闭区间[a, b]- 循环条件- ⭐- 边界更新操作左闭右开:[a, b)- 循环条件- ⭐(左右相等没意义)- 边界更新操作- ⭐(开区间不需要越位)左开右闭:(a, b](一般不考虑这种情况,前两种已经足够)- 循环条件- ⭐(左右相等没意义)- 边界更新操作- ⭐(开区间不需要越位)二、⭐⭐需要考虑的边界值条件数组为空(nums: [])指针越界(start > length - 1;

2024-07-31 16:42:33 1028

原创 代码随想录算法训练营_day01

题目描述:给你一个数组 `nums` 和一个值 `val`,你需要 **[原地](https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95)** 移除所有数值等于 `val` 的元素。- 题目描述: 给你一个按 **非递减顺序** 排序的整数数组 `nums`,返回 **每个数字的平方** 组成的新数组,要求也按 **非递减顺序** 排序。与方法一不同的是,**方法二避免了需要保留的元素的重复赋值操作**。

2024-07-31 16:40:56 308

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除