自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 哈希表:两种方法

哈希函数:把大范围的数据映射到一个小范围的数据集上面。两种处理冲突的方法:拉链法和开放寻址法。mod数据一般为质数,减小冲突。

2023-07-11 14:56:31 55

原创 堆:大顶与小顶

调整规则:找到该节点和他的所有儿子。如果不是,就将该节点的值和最大值进行交换,然后递归的调整和该节点交换值得那个节点。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值, 这种情况称为大顶堆,注意:没有要求结点的左孩子的值和右孩子的值的大小关系。因为 4 和 9 交换了,递归处理现在保存 4 的那个节点: 找到它的两个儿子:5, 6, 其中 6 最大,交换 4 和 6。重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。

2023-07-10 18:14:28 72 1

原创 并查集_合并集合

对于每个询问指令”Q a b”,都要输出一个结果,如果a和b在同一集合内,则输出“Yes”,否则输出“No”。“M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;接下来m行,每行包含一个操作指令,指令为“M a b”或“Q a b”中的一种。“Q a b”,询问编号为a和b的两个数是否在同一个集合中;一共有n个数,编号是1~n,最开始每个数各自在一个集合中。第一行输入整数n和m。

2023-07-09 21:01:41 56 1

原创 并查集:合并集合

上述中以5为祖宗节点的是p[5],p[3],p[9];(即p[5]=5,p[3]=5,p[9]=5)然后再把p[9]=9插入其中,所以p[9]=find(3);如果要将以6为祖宗节点的集合插入到以5为祖宗节点的集合,则该操作可以是。也可以是p[find(9)]=find(3),因为9的节点本身就是9。如果要将p[9]=9插入到p[3]当中,应该找到3的祖宗节点,p[6]=find(3)(或者find(9),find(5))此时以5为祖宗节点的集合为{5,3,9};此时以5为祖宗节点的集合为{5,3}

2023-07-08 17:07:09 66

原创 Trie:高效存储和查找字符串集合的数据结构

快速存储/查找:红色星星为标记。

2023-07-07 17:07:46 78 1

原创 KMP算法查相同字符

next[i]为以i为终点的后缀;前一段和后一段相等,且长度最长。只需要关注模版串部分的前缀和后缀。p里面从1到j与后面半段相等。

2023-07-07 10:30:54 37 1

原创 单调栈Stack

给定一个序列,求序列中的每一个数左边或右边第一个比他大或比他小的数在什么地方;用单调递增栈,当该元素可以入栈的时候,栈顶元素就是它左侧第一个比它小的元素。

2023-06-19 17:32:55 22 1

原创 Queue 队列:FIFO

现在要对队列进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。hh = 0 tt = -1 数组q = [0, 0, 0]因为操作队列,所以他有两个指针出队hh, 入队tt。操作的查询结果为一个整数,表示队头元素的值。操作都要输出一个查询结果,每个结果占一行。2.当hh >= tt, 队列存在元素。hh = 0 q[hh] = 1出队。hh = 1 q[hh] = 2出队。hh = 2 q[hh] = 3出队。hh = 0 q[hh] = 1出队。第一行包含整数 M,表示操作次数。

2023-06-15 15:09:29 130 1

原创 模拟栈Stack: LIFO

empty :top 大于等于 0 栈非空,小于 0 栈空。tt == -1?“YES” : “NO”push x :栈顶所在索引往后移动一格,然后放入x。用tt表示栈顶所在的索引。初始时,tt = -1,表示没有元素。pop : top 往前移动一格。query : 返回栈顶元素。

2023-06-13 13:17:09 46 1

原创 双链表 827

题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数,…第 n 个插入的数。现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。第一行包含整数 M,表示操作次数。共一行,将整个链表从左到右输出。e[N]: 这个点的值。l[N]:左边的点是谁。r[N]:右边的点是谁。

2023-06-13 10:15:41 30 1

原创 单链表 例题

一个是Data Value,一个是下一个数值的位置。

2023-06-12 20:05:39 32 1

原创 区间合并 快速取区间交集

例如:[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。给定 n 个区间 [li,ri],要求合并所有有交集的区间。1, 有边界问题:两个区间如果只有端点相交的话,也可以合并。共一行,包含一个整数,表示合并区间完成后的区间个数。接下来 n 行,每行包含两个整数 l 和 r。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。第一行包含整数 n。

2023-06-12 15:34:40 152 1

原创 二进制中1的个数

共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。第二行包含 n 个整数,表示整个数列。0≤数列中元素的值≤109。第一行包含整数 n。

2023-06-11 16:20:27 16

原创 判断子序列

给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…而得的序列,例如序列 {a1,a3,a5} 是序列 {a1,a2,a3,a4,a5} 的一个子序列。第二行包含 n 个整数,表示 a1,a2,…第三行包含 m 个整数,表示 b1,b2,…如果 a 序列是 b 序列的子序列,输出一行。请你判断 a 序列是否为 b 序列的子序列。第一行包含两个整数 n,m。子序列指序列的一部分项按。

2023-06-09 20:33:22 147

原创 数组元素的目标和

对于任意A[i]+B[j]>X, A,B单调递增,则显然,A[i+1]+B[j]>A[i]+B[j]>X。因此对于任意的指针i,对应的指针j搜索的区域在A[i]+B[j]>X与A[i]+B[j]<X之间,搜索的个数是常数的,因此总的时间复杂度为O(n)。第一行包含三个整数 n,m,x,分别表示 A 的长度,B 的长度以及目标值 x。双指针的核心:将上一状态指针所表达的信息传递至下一状态,从而减少无谓的搜索。请你求出满足 A[i]+B[j]=x 的数对 (i,j)。第二行包含 n 个整数,表示数组 A。

2023-06-09 15:50:26 126

原创 【无标题】双指针:最长连续不重复子序列

给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。第二行包含 n 个整数(均在 0∼105 范围内),表示整数序列。共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。第一行包含整数 n。

2023-06-08 21:38:51 25

空空如也

空空如也

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

TA关注的人

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