- 博客(35)
- 收藏
- 关注
原创 【leetcode】(十五)有序表-AVL树-SB树-红黑树-跳表
本文系统介绍了有序表的多种实现结构,包括红黑树、AVL树、SB树和跳表。这些数据结构均能在O(logN)级别实现插入、删除与查找操作。其中,平衡二叉树(如AVL树、红黑树)通过旋转维护高度平衡;SB树基于子树节点数量进行平衡调整;跳表则利用多层索引链表实现概率性平衡。文章详细阐述了各类结构的插入、删除、旋转及修复逻辑,并通过代码示例验证其正确性。最终对比分析表明,跳表以简单直观的随机索引机制,在期望时间复杂度上达到对数级别,是高效且易于实现的替代方案。
2026-11-10 23:16:55
64
原创 【leetcode】(十四)从暴力递归到动态规划
/一共是1~N这么多位置,固定参数//最终的目标是E,固定参数//当前在cur位置//还剩rest步需要走//返回从cur出发,恰好走rest步到达E的方法数//来到终止位置,记录1个路径;没有来到终止位置,0个路径1:0;//res>0有路可走//当前位置是1,只能从1->2,rest-1//当前位置是N,要走,rest-1//机器人来达的是中间位置,可以往左一步,或者往右一步。// 方法二:记忆化搜索i<=K;i++){j<=N;j++){
2026-10-21 17:18:50
203
原创 【leetcode】(十三)大数据处理
采用累加和的方法:range(0~2^32-1),40亿个数,若采用无符号整型存储,只用10KB的内存,10KB/4B=2500长度,最接近的数是2048,于是设置unsign int[]总数为2048,记录词频(arr[i]++)后,比如0~2047上arr[0]出现了100万次,2048~2048*2-1上arr[1]出现10亿,2048*2~2048*3-1上arr[2]出现5亿次......如果arr[i]的范围刚刚让累加和=20亿,那么中位数就出现在这个范围上。其中1出现在0,2,4,6位上。
2026-10-17 21:41:46
115
原创 【leetcode】(十二)树形dp
树的头节点是公司唯一的老板。从二叉树的节点a出发,可以向上或者向下走,但沿途的节点只能经过一次,到达节点b时路径上的节点个数叫作a到b的距离,那么二叉树任何两个节点之间都有距离,求整棵树上的最大距离。0+max{a来时整棵树最大快乐值,a不来整棵树最大快乐值}+max{b来时整棵树最大快乐值,b不来整棵树最大快乐值}+max{c来时整棵树最大快乐值,c不来整棵树最大快乐值}以某个节点X为头节点的子树中,分析答案有哪些可能性,并且这种分析是以X的左子树、X的右子树和X整棵树的角度来考虑可能性的。
2026-10-14 11:08:38
59
原创 【leetcode】(十一)Manacher算法,滑动窗口和单调栈
Manacher算法解决的问题字符串str中,最长回文子串的长度如何求解?如何做到时间复杂度O(N)完成?例如,str"abc12320de“的最长回文子串为”232“。采用直观的暴力解法,我们可以遍历每一个字符,再以这个字符为中心左右两边寻找对称字符,但是长度为偶数的回文难以得到,比如字符串”122131221“中的两个”1221“。
2026-10-10 18:17:04
173
原创 【leetcode】(十)并查集与KMP算法
【题目】一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛?(leetcode hot 100,剑指offer105,leetcode1254)【举例】001010111010100100000000这个矩阵中有三个岛【进阶】如何设计一个并行算法解决这个问题。
2026-10-07 22:17:43
229
原创 【leetcode】(九)哈希函数与哈希表
f(in)=out(1)in->∞,out->s.比如md5算法输出的范围是0~2^64-1,SHA1算法的输入范围是0~2^128-1;
2026-10-06 23:07:31
186
原创 【leetcode】(七)前缀树和贪心算法
何为前缀树?如何生成前缀树?比如["abc","bck","abd","ace"],“ ”包围的就是从根节点出发走向的的路的名称,如果有就复用,如果没有就添加节点将路延续下去,其中节点是按照遍历集合生成路径的顺序命名的。我们可以设置两个信号值来模拟这一过程。以["abc","ab","bc","bck"]为例,我们为每一个节点ni设置一个通路标记(p,pass)和一个末尾节点标记(e,end)来判断这一过程。p和e在抵达初始节点(n0)之前设置为0,当初始节点n0进入之后,pass值就加1;
2026-09-27 22:57:00
230
原创 【leetcode】(六) 图
1)邻接表邻接表存储无向无权图如图所示:邻接表存储无向带权图如图所示:2)邻接矩阵邻接矩阵表示无向带权图。如何表达图?生成图?另,数组也可以表示图,如定义以下的序列关系,对于数组arr[5,2,2,4,2,1],对应序列{0,1,2,3,4,5},我们规定,序列号指向数组的值,比如[0->5,1->2,2->2],也可以组成图。这种方式是面试中喜欢考的题目,超出日常使用的邻接矩阵和邻接表法。应对策略:将日常能够用到的图的表示方法将图实现一遍,形成一个模板,在面对其它格式构造的图的题目时,写一个接口将这两种结
2026-09-17 01:32:33
156
原创 【leetcode】(五)二叉树
本文系统介绍了二叉树的结构与遍历实现,涵盖递归与非递归方式的先序、中序、后序遍历,以及层序遍历求最大宽度。重点阐述了搜索二叉树(BST)、完全二叉树、满二叉树和平衡二叉树的判定方法,并通过树型DP思想统一解决相关问题。此外,还讲解了最低公共祖先、后继节点查找、序列化与反序列化等经典算法,最后以折纸问题为例展示二叉树的巧妙应用。
2026-09-09 21:04:42
180
原创 【leetcode】(四)排序算法汇总和链表
时间复杂度空间复杂度稳定性选择O(N^2)O(1)×冒泡O(N^2)O(1)√插入O(N^2)O(1)√归并O(N*logN)O(N)√快排(随机)O(N*logN)O(logN)×堆O(N*logN)O(1)×目前没有找到时间复杂度O(N*logN),额外空间复杂度O(1),又稳定的排序。常见的坑(1),归并排序的额外空间复杂度可以变成O(1),但是非常难且变完之后不再稳定,不需要掌握,有兴趣可以搜“归并排序 内部缓存法”
2026-09-06 18:51:15
381
原创 【leetcode】(三)堆排序和桶排序
1,堆结构就是用数组实现的完全二叉树结构2,完全二叉树中如果每棵子树的最大值都在顶部就是大根堆3,完全二叉树中如果每棵子树的最小值都在顶部就是小根堆4,堆结构的heapInsert与heapify操作5,堆结构的增大和减少6,优先级队列结构,就是堆结构。
2026-09-03 17:37:01
236
原创 【leetcode】(二)认识O(NlogN)的排序
用递归方法找一个数组中的最大值,系统上到底是怎么做的?master 公式的使用1)log(b,a) > d -> 复杂度为 O(N^log(b,a))2)log(b,a) = d -> 复杂度为 O(N^d * logN)3)log(b,a) < d -> 复杂度为 O(N^d)
2026-09-02 22:20:28
368
原创 【leetcode】(一)认识复杂度和简单排序算法
常数时间的操作一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。时间复杂度为一个算法流程中,常数操作数量的一个指标。常用 O(读作 big O)来表示。具体来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操作,进而总结出常数操作数量的表达式。在表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果为 f(N),那么时间复杂度为 O(f(N))。
2026-09-01 22:26:02
171
原创 [RedHat-124]第五章-问答题:创建、查看和编辑文本文件
I/O重定向是改变命令输入或输出默认位置的操作。例如,将输出从屏幕重定向到文件,或将输入从键盘改为文件。在Linux系统中,有三种标准的I/O流:(1) 标准输入(stdin,文件描述符0):默认从键盘输入;(2) 标准输出(stdout,文件描述符1):默认输出到终端;(3) 标准错误(stderr,文件描述符2):默认输出到终端。/dev/null是一个特殊的设备文件,被称为“空设备”或“位桶”。由于写入它的数据会被丢弃,常用于抑制不需要的输出或清空文件内容。(1)&> /dev/null:将命令的标准
2026-01-19 20:49:09
656
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅