
算法基础课
算法基础课
aJupyter
自然语言处理方向在读硕士生,优快云人工智能领域优质创作者,语雀知识库构建者,欢迎大家交流~
https://github.com/aJupyter
展开
-
2583. 二叉树中的第 K 大层和
时间复杂度:空间复杂度:原创 2024-02-23 16:26:40 · 904 阅读 · 0 评论 -
树的重心-dfs
重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。,表示将重心删除后,剩余各个连通块中点数的最大值。给定一颗树,树中包含 n。行,每行包含两个整数 a。个结点(编号 1∼n。原创 2023-12-05 11:44:41 · 503 阅读 · 0 评论 -
845. 八数码
例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。现在,给你一个初始网格,请你求出得到正确排列至少需要进行多少次交换。个数字和一个 x 恰好不重不漏地分布在这 3×3。则输入为:1 2 3 x 4 6 7 5 8。输出占一行,包含一个整数,表示最少交换次数。如果不存在解决方案,则输出 −1。输入占一行,将 3×3。的初始网格描绘出来。原创 2023-11-03 21:12:57 · 189 阅读 · 0 评论 -
843. n-皇后问题
的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。输出方案的顺序任意,只要不重复且没有遗漏即可。,请你输出所有的满足条件的棋子摆法。的字符串,用来表示完整的棋盘状态。每个方案输出完成后,输出一个空行。行,每行输出一个长度为 n。注意:行末不能有多余空格。共一行,包含整数 n。原创 2023-10-31 17:55:29 · 167 阅读 · 0 评论 -
字符串哈希
对于每个询问输出一个结果,如果两个字符串子串完全相同则输出 Yes,否则输出 No。个询问,每个询问包含四个整数 l1,r1,l2,r2。的字符串,字符串中只包含大小写英文字母和数字。行,每行包含四个整数 l1,r1,l2,r2。这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。,表示一次询问所涉及的两个区间。,表示字符串长度和询问次数。,请你判断 [l1,r1]第二行包含一个长度为 n。注意,字符串的位置从 1。的字符串,再给定 m。原创 2023-10-29 16:34:34 · 152 阅读 · 0 评论 -
开放寻址法模拟散列表
行,每行包含一个操作指令,操作指令为 I x,Q x 中的一种。对于每个询问指令 Q x,输出一个询问结果,如果 x。在集合中出现过,则输出 Yes,否则输出 No。次操作,对于每个询问操作输出对应的结果。I x,插入一个整数 x。Q x,询问整数 x。是否在集合中出现过;原创 2023-10-26 11:15:19 · 135 阅读 · 0 评论 -
数组模拟散列表
行,每行包含一个操作指令,操作指令为 I x,Q x 中的一种。对于每个询问指令 Q x,输出一个询问结果,如果 x。在集合中出现过,则输出 Yes,否则输出 No。次操作,对于每个询问操作输出对应的结果。I x,插入一个整数 x。Q x,询问整数 x。是否在集合中出现过;原创 2023-10-24 17:28:34 · 139 阅读 · 0 评论 -
数组模拟堆
行,每行包含一个操作指令,操作指令为 I x,PM,DM,D k 或 C k x 中的一种。对于每个输出指令 PM,输出一个结果,表示当前集合中的最小值。DM,删除当前集合中的最小值(数据保证此时的最小值唯一);PM,输出当前集合中的最小值;个操作,输出当前集合的最小值。个插入的数,将其变为 x。I x,插入一个数 x。C k x,修改第 k。次操作,对于所有第 2。原创 2023-10-21 22:50:25 · 279 阅读 · 0 评论 -
数组模拟堆实现堆排序
的整数数列,从小到大输出前 m。个整数,表示整数数列中前 m。个整数,表示整数数列。1≤数列中元素≤109。原创 2023-10-17 11:41:04 · 132 阅读 · 0 评论 -
并查集-连通块中点的数量
行,每行包含一个操作指令,指令为 C a b,Q1 a b 或 Q2 a 中的一种。在同一个连通块中,则输出 Yes,否则输出 No。对于每个询问指令 Q2 a,输出一个整数表示点 a。并查集可以维护各个集合之间的一些属性,比如本题的。对于每个询问指令 Q1 a b,如果 a。)的无向图,初始时图中没有边。Q1 a b,询问点 a。是否在同一个连通块中,a。所在连通块中点的数量;个点(编号为 1∼n。C a b,在点 a。Q2 a,询问点 a。所在连通块中点的数量。原创 2023-10-16 11:27:35 · 136 阅读 · 0 评论 -
并查集-合并集合
行,每行包含一个操作指令,指令为 M a b 或 Q a b 中的一种。的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;对于每个询问指令 Q a b,都要输出一个结果,如果 a。在同一集合内,则输出 Yes,否则输出 No。,最开始每个数各自在一个集合中。的两个数是否在同一个集合中;Q a b,询问编号为 a。M a b,将编号为 a。个数,编号是 1∼n。原创 2023-10-15 10:39:41 · 361 阅读 · 0 评论 -
最大异或对
(异或)运算,得到的结果最大是多少?个整数 A1,A2……中选出两个进行 xor。第一行输入一个整数 N。输出一个整数表示答案。原创 2023-10-14 21:11:24 · 191 阅读 · 0 评论 -
KMP字符串
所有字符串中只包含大小写英文字母以及阿拉伯数字。共一行,输出所有出现位置的起始下标(下标从 0。开始计数),整数之间用空格隔开。中所有出现的位置的起始下标。,以及一个模式串 P。中多次作为子串出现。第二行输入字符串 P。第四行输入字符串 S。原创 2023-10-12 16:58:38 · 149 阅读 · 0 评论 -
字符串统计(哈希做法)
行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。对于每个询问指令 Q x,都要输出一个整数作为结果,表示 x。Q x 询问一个字符串在集合中出现了多少次。个操作,所有输入的字符串总长度不超过 105。I x 向集合中插入一个字符串 x。,字符串仅包含小写英文字母。在集合中出现的次数。原创 2023-10-12 15:36:19 · 149 阅读 · 0 评论 -
Trie字符串统计
行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。对于每个询问指令 Q x,都要输出一个整数作为结果,表示 x。Q x 询问一个字符串在集合中出现了多少次。个操作,所有输入的字符串总长度不超过 105。I x 向集合中插入一个字符串 x。,字符串仅包含小写英文字母。在集合中出现的次数。原创 2023-10-11 22:29:13 · 503 阅读 · 0 评论 -
单调队列-滑动窗口
你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。该数组为 [1 3 -1 -3 5 3 6 7],k。第一行输出,从左至右,每个位置滑动窗口中的最小值。第二行输出,从左至右,每个位置滑动窗口中的最大值。的滑动窗口,它从数组的最左边移动到最右边。,分别代表数组长度和滑动窗口的长度。每次滑动窗口向右移动一个位置。个整数,代表数组的具体数值。给定一个大小为 n≤106。窗口位置 最小值 最大值。同行数据之间用空格隔开。你只能在窗口中看到 k。第一行包含两个整数 n。原创 2023-10-10 16:11:58 · 267 阅读 · 0 评论 -
数组模拟单调栈
的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。个数的左边第一个比它小的数,如果不存在则输出 −1。个整数,表示整数数列。1≤数列中元素≤109。原创 2023-10-09 13:14:30 · 159 阅读 · 0 评论 -
数组模拟队列
其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示队头元素的值。行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。push x – 向队尾插入一个数 x。empty – 判断队列是否为空;pop – 从队头弹出一个数;query – 查询队头元素。个操作,其中的每个操作 3。现在要对队列进行 M。都要输出相应的结果。原创 2023-10-08 23:14:11 · 137 阅读 · 0 评论 -
数组模拟栈
其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示栈顶元素的值。行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。push x – 向栈顶插入一个数 x。empty – 判断栈是否为空;pop – 从栈顶弹出一个数;query – 查询栈顶元素。个操作,其中的每个操作 3。都要输出相应的结果。原创 2023-10-07 10:49:56 · 146 阅读 · 0 评论 -
数组模拟双链表
次操作,进行完所有操作后,从左到右输出整个链表。实现一个双链表,双链表初始为空,支持 5。L x,表示在链表的最左端插入数 x。R x,表示在链表的最右端插入数 x。个插入的数并不是指当前链表的第 k。个数,则按照插入的时间顺序,这 n。共一行,将整个链表从左到右输出。个插入的数左侧插入一个数;IL k x,表示在第 k。个插入的数左侧插入一个数。IR k x,表示在第 k。个插入的数右侧插入一个数。个插入的数右侧插入一个数。在最左侧插入一个数;在最右侧插入一个数;D k,表示将第 k。原创 2023-10-06 19:02:01 · 247 阅读 · 0 评论 -
826. 单链表
次操作,进行完所有操作后,从头到尾输出整个链表。个插入的数并不是指当前链表的第 k。例如操作过程中一共插入了 n。个数,则按照插入的时间顺序,这 n。H x,表示向链表头插入一个数 x。共一行,将整个链表从头到尾输出。个插入的数后面插入一个数 x。个插入的数后面的数(当 k。个插入的数后插入一个数。I k x,表示在第 k。现在要对该链表进行 M。D k,表示删除第 k。时,表示删除头结点)。向链表头插入一个数;个插入的数后面的数;原创 2023-10-05 19:00:28 · 338 阅读 · 0 评论 -
【全】差分模板
【代码】【全】差分模板。原创 2023-09-27 22:04:18 · 183 阅读 · 0 评论 -
前缀和模板
【代码】前缀和模板。原创 2023-09-26 21:12:21 · 219 阅读 · 0 评论 -
实战演练—高精度专栏
【代码】实战演练—高精度专栏。原创 2023-09-26 11:54:50 · 217 阅读 · 0 评论 -
795. 前缀和
−1000≤数列中元素的值≤1000。对于每个询问,输出原序列中从第 l。个询问,每个询问输入一对 l,r。行,每行输出一个询问的结果。,表示一个询问的区间范围。行,每行包含两个整数 l。第一行包含两个整数 n。个整数,表示整数数列。原创 2023-08-18 09:12:46 · 131 阅读 · 0 评论 -
790. 数的三次方根
共一行,包含一个浮点数,表示问题的解。共一行,包含一个浮点数 n。原创 2023-08-17 10:47:44 · 181 阅读 · 0 评论 -
789. 数的范围
行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回 -1 -1。如果数组中不存在该元素,则返回 -1 -1。给定一个按照升序排列的长度为 n。的起始位置和终止位置(位置从 0。对于每个查询,返回一个元素 k。个整数(均在 1∼10000。,表示数组长度和询问个数。范围内),表示完整数组。行,每行包含一个整数 k。的整数数组,以及 q。,表示一个询问元素。原创 2023-08-17 10:14:20 · 147 阅读 · 0 评论 -
788. 逆序对的数量
的整数数列,请你计算数列中的逆序对的数量。数列中的元素的取值范围 [1,109]逆序对的定义如下:对于数列的第 i。输出一个整数,表示逆序对的个数。,则其为一个逆序对;个元素,如果满足 ia[j]个整数,表示整个数列。原创 2023-08-15 09:33:07 · 268 阅读 · 0 评论 -
787. 归并排序
请你使用归并排序对这个数列按照从小到大进行排序。个整数(所有整数均在 1∼109。输入共两行,第一行包含整数 n。并将排好序的数列按顺序输出。个整数,表示排好序的数列。范围内),表示整个数列。给定你一个长度为 n。输出共一行,包含 n。原创 2023-08-13 11:49:40 · 291 阅读 · 0 评论 -
786. 第k个数
请用快速选择算法求出数列从小到大排序后的第 k。个整数(所有整数均在 1∼109。输出一个整数,表示数列的第 k。的整数数列,以及一个整数 k。范围内),表示整数数列。第一行包含两个整数 n。原创 2023-08-13 11:37:07 · 277 阅读 · 0 评论 -
800. 数组元素的目标和(C++和Python3)——2023.5.16打卡
请你求出满足 A[i]+B[j]=x。给定两个升序排序的有序数组 A。第一行包含三个整数 n,m,x。共一行,包含两个整数 i。同一数组内元素各不相同。数组长度不超过 105。,以及一个目标值 x。的长度以及目标值 x。个整数,表示数组 A。个整数,表示数组 B。1≤数组元素≤109。原创 2023-05-16 13:38:42 · 506 阅读 · 0 评论 -
799. 最长连续不重复子序列(C++和Python3)——2023.5.15打卡
的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。个整数(均在 0∼105。范围内),表示整数序列。原创 2023-05-16 00:06:58 · 210 阅读 · 0 评论 -
798. 差分矩阵(C++和Python3)——2023.5.8打卡
修改矩阵b的[x1,y1],[x2,y2]范围的矩阵,首先构造b的差分矩阵a。个操作,每个操作包含五个整数 x1,y1,x2,y2,c。每个操作都要将选中的子矩阵中的每个元素的值加上 c。个整数,表示所有操作进行完毕后的最终矩阵。表示一个子矩阵的左上角坐标和右下角坐标。−1000≤矩阵内元素的值≤1000。请你将进行完所有操作后的矩阵输出。个整数 x1,y1,x2,y2,c。将b进行求解前缀和矩阵即可得到a。第一行包含整数 n,m,q。列的整数矩阵,再输入 q。,其中 (x1,y1)个整数,表示整数矩阵。原创 2023-05-08 14:50:36 · 378 阅读 · 0 评论 -
796. 子矩阵的和(C++和Python3)——2023.5.6打卡
x1,y1] 到 [x2, y2]的子矩阵的和 s[x2][y2] - s[x1-1][y2] - s[x2][y1-1] + s[x1-1][y1-1]个询问,每个询问包含四个整数 x1,y1,x2,y2。行,每行包含四个整数 x1,y1,x2,y2。,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。−1000≤矩阵内元素的值≤1000。第一行包含三个整数 n,m,q。行,每行输出一个询问的结果。列的整数矩阵,再输入 q。个整数,表示整数矩阵。原创 2023-05-06 13:21:40 · 571 阅读 · 0 评论 -
795. 前缀和(C++和Python3)——2023.5.5打卡
求[l,r]的范围和:S[r] - S[l-1]−1000≤数列中元素的值≤1000。对于每个询问,输出原序列中从第 l。个询问,每个询问输入一对 l,r。行,每行输出一个询问的结果。,表示一个询问的区间范围。行,每行包含两个整数 l。第一行包含两个整数 n。个整数,表示整数数列。原创 2023-05-05 17:37:33 · 509 阅读 · 0 评论 -
789. 数的范围(C++和Python3)——2023.5.3打卡
行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回 -1 -1。如果数组中不存在该元素,则返回 -1 -1。给定一个按照升序排列的长度为 n。的起始位置和终止位置(位置从 0。对于每个查询,返回一个元素 k。个整数(均在 1∼10000。,表示数组长度和询问个数。范围内),表示完整数组。行,每行包含一个整数 k。的整数数组,以及 q。,表示一个询问元素。原创 2023-05-03 13:34:21 · 610 阅读 · 0 评论 -
788. 逆序对的数量(C++和Python3)——2023.5.2打卡
单独在左右区间的可以直接递归处理,因为递归排序使得每个区间都是有序的。的整数数列,请你计算数列中的逆序对的数量。在左区间内,在右区间内,横跨左右两个区间。数列中的元素的取值范围 [1,109]逆序对的定义如下:对于数列的第 i。输出一个整数,表示逆序对的个数。利用归并的过程来计算逆序对的数量。,则其为一个逆序对;横跨左右两个区间的需要计算。个元素,如果满足 ia[j]个整数,表示整个数列。总的来看逆序对有三种。原创 2023-05-02 16:36:10 · 831 阅读 · 0 评论 -
787. 归并排序(C++和Python3)——2023.5.1打卡
请你使用归并排序对这个数列按照从小到大进行排序。个整数(所有整数均在 1∼109。输入共两行,第一行包含整数 n。并将排好序的数列按顺序输出。个整数,表示排好序的数列。范围内),表示整个数列。给定你一个长度为 n。输出共一行,包含 n。原创 2023-05-01 11:42:57 · 147 阅读 · 2 评论 -
786. 第k个数(C++和Python3)——2023.4.30打卡
请用快速选择算法求出数列从小到大排序后的第 k。个整数(所有整数均在 1∼109。输出一个整数,表示数列的第 k。的整数数列,以及一个整数 k。范围内),表示整数数列。第一行包含两个整数 n。原创 2023-04-30 17:02:49 · 195 阅读 · 0 评论 -
785. 快速排序(C++和Python3)——2023.4.29打卡
请你使用快速排序对这个数列按照从小到大进行排序。个整数(所有整数均在 1∼109。输入共两行,第一行包含整数 n。并将排好序的数列按顺序输出。个整数,表示排好序的数列。范围内),表示整个数列。给定你一个长度为 n。输出共一行,包含 n。原创 2023-04-29 17:03:35 · 136 阅读 · 0 评论