随笔分类 -  算法

摘要:1、Trie树 以AcWing.835为例, 维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串x;“Q x”询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过10^5,字符串仅包含小写英文字母。 输入格式第一行包含整数N,表示操作数。 接下来N行,每行包含 阅读全文
posted @ 2023-10-29 10:29 karinto 阅读(9) 评论(0) 推荐(0) 编辑
摘要:1、KMP 以AcWing.831为例, 给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。 模板串P在模式串S中多次作为子串出现。 求出模板串P在模式串S中所有出现的位置的起始下标。 输入格式第一行输入整数N,表示字符串P的长度。 第二行输入字符串P。 第三行输入 阅读全文
posted @ 2023-10-29 10:27 karinto 阅读(21) 评论(0) 推荐(0) 编辑
摘要:1、单调栈 以AcWing.830为例, 给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出−1。 输入格式第一行包含整数N,表示数列长度。 第二行包含N个整数,表示整数数列。 输出格式共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出− 阅读全文
posted @ 2023-10-10 17:08 karinto 阅读(9) 评论(0) 推荐(0) 编辑
摘要:1、单链表(静态链表) 以AcWing.826为例,题目要求如下: 实现一个单链表,链表初始为空,支持三种操作: 向链表头插入一个数;删除第k个插入的数后面的数; 在第k个插入的数后插入一个数。 现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。 注意: 题目中第k个插入的数并不是 阅读全文
posted @ 2023-10-02 16:43 karinto 阅读(61) 评论(0) 推荐(0) 编辑
摘要:1、区间合并 以AcWing.803为例,题目要求如下: 给定n个区间 [li,ri],要求合并所有有交集的区间。 注意如果在端点处相交,也算有交集。 输出合并完成后的区间个数。 例如:[1,3] 和 [2,6]可以合并为一个区间 [1,6]。 输入格式第一行包含整数 n。 接下来 n 行,每行包含 阅读全文
posted @ 2023-10-01 16:16 karinto 阅读(31) 评论(0) 推荐(0) 编辑
摘要:1、离散化 值域大而数值稀疏的题目,通常先将需要操作的数映射到一个数组中,再做后续操作,可以大大减少时间复杂度。 以AcWing.802为例,是一个典型的前缀和问题,但问题在于,若仅仅使用前缀和算法,时间复杂度会很高,因此需要先做离散化映射。 题目要求如下: 假定有一个无限长的数轴,数轴上每个坐标上 阅读全文
posted @ 2023-09-28 21:36 karinto 阅读(40) 评论(0) 推荐(0) 编辑
摘要:1、以AcWing.801为例,题目要求如下: 给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。 输入格式第一行包含整数n。 第二行包含n个整数,表示整个数列。 输出格式共一行,包含n个整数,其中的第i个数表示数列中的第i个数的二进制表示中1的个数。 数据范围1≤n≤100000 阅读全文
posted @ 2023-09-26 10:01 karinto 阅读(22) 评论(0) 推荐(0) 编辑
摘要:1、单队列 例1:将字符串以换行符间隔开 输入一串字符串,字符串有多个由单个逗号隔开的单词,任务是需要把单词间隔开,每个单词换行输出。 输入样例abc def ghi 输出样例abc def ghi #include <iostream> using namespace std; const int 阅读全文
posted @ 2023-09-25 11:56 karinto 阅读(33) 评论(0) 推荐(0) 编辑
摘要:1、一维差分 首先要知道,差分是前缀和的逆运算, a1 a2 …… an 前缀和b1 b2 …… bn 差分 以AcWing.797为例,题目要求如下: 输入一个长度为 n 的整数序列。 接下来输入 m 个操作,每个操作包含三个整数 l, r, c ,表示将序列中 [l,r] 之间的每个数加上 c 阅读全文
posted @ 2023-09-21 21:20 karinto 阅读(105) 评论(0) 推荐(0) 编辑
摘要:1、一维前缀和 以AcWing.795为例,题目要求如下: 输入一个长度为N的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。 输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数l和r,表示一 阅读全文
posted @ 2023-09-21 21:16 karinto 阅读(30) 评论(0) 推荐(0) 编辑
摘要:#if 1 #include <iostream> #include <vector> #include <algorithm> using namespace std; vector<int> add(vector<int> A, vector<int> B) { vector<int> C; i 阅读全文
posted @ 2023-09-20 10:02 karinto 阅读(10) 评论(0) 推荐(0) 编辑
摘要:1、整数二分 以acwing 789为例,题目要求如下: 第一行输入整数n和q,表示数组长度和询问个数。 第二行输入数组,包含n个整数。 接下来q行,每一行一个整数k,表示一个问询元素。 要求输出q行,每行包含两个整数,表示所求元素的起始位置和终止位置。 如果数组中不存在该元素,则返回 -1 -1。 阅读全文
posted @ 2023-09-16 20:20 karinto 阅读(34) 评论(0) 推荐(0) 编辑
摘要:1、快速排序 #include <iostream> using namespace std; const int N = 1e5 + 10; int n, q[N]; void qksort(int q[], int l, int r) { if (l >= r) return; int x = 阅读全文
posted @ 2023-09-16 20:00 karinto 阅读(8) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示