![](https://img-blog.csdnimg.cn/direct/9dcd6740197542dc97eddc07411742a7.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
acwing算法基础
文章平均质量分 70
学习算法笔记
橘子味的茶二
我像一粒尘埃
展开
-
第二讲 数据结构 AcWing 827. 双链表
例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n个数依次为:第 1个插入的数,第2个插入的数,…注意:题目中第 k个插入的数并不是指当前链表的第 k个数。IL k x,表示在第 k 个插入的数左侧插入一个数。IR k x,表示在第 k 个插入的数右侧插入一个数。L x,表示在链表的最左端插入数 x。R x,表示在链表的最右端插入数 x。D k,表示将第 k 个插入的数删除。在第 k 个插入的数左侧插入一个数;在第 k个插入的数右侧插入一个数。将第 k个插入的数删除;在最右侧插入一个数;原创 2024-02-07 17:12:35 · 500 阅读 · 0 评论 -
第二讲:数据结构 AcWing 826. 单链表
笔试的题目大部分 大部分涉及到链表都是十万级别的 用数组的方式创建链表速度很快,不会超时,而如果用new 一个结构体的话 大部分就是比较慢的 所以不建议使用。例如操作过程中一共插入了 n个数,则按照插入的时间顺序,这 n个数依次为:第 1 个插入的数,第 2 个插入的数,…D k,表示删除第 k 个插入的数后面的数(当 k 为 0 时,表示删除头结点)。注意:题目中第 k个插入的数并不是指当前链表的第 k 个数。I k x,表示在第 k个插入的数后面插入一个数 x。删除第 k个插入的数后面的数;原创 2024-02-07 16:35:43 · 903 阅读 · 0 评论 -
C++ STL简介(转自acwing)
【代码】C++ STL简介(转自acwing)转载 2024-01-18 09:58:16 · 42 阅读 · 0 评论 -
快速幂--快速解决一类问题
那么 5可以被分成而的2^0 + 2 ^2 即为1001的四位 那么在4的过程中。这是在过程中没有mod p的情况 为了防止数据爆了 往往在过程中加入mod p的操作。给定 n 组 ai,bi,pi,对于每组数据,求出 abiimodpi 的值。对于每组数据,输出一个结果,表示 ai ^bimod pi 的值。当k=5被遍历到第四个位子的时候 此时 a=a^4=256 然后。4的5次方mod7 -------四的五次方 1024。这个过程中 其实是把他的次方k分解成不同的2的次方相加。原创 2024-01-11 17:15:41 · 353 阅读 · 0 评论 -
约数个数--一道高中数学题。。。。
思路就是先把原数分解为质因数,最后把每一个数的指数累加即可。从a1一直分解到an,由于a的数据过大,此处用哈希表进行存储。因为每一种pi都有0->xi种选法,一共xi+1种,一共k个所以迭代k次。输出一个整数,表示所给正整数的乘积的约数个数,答案需对 109+7。约数个数=(x1+1)(x2+1)(x3+1)…,请你输出这些数的乘积的约数个数,答案对 10^9+7。再用各个质数的指数加一后再相乘即为此数的约数个数,24的约数:1、2、3、4、6、8、12、24。2=8, 即表示24有8个约数。原创 2024-01-11 16:26:39 · 357 阅读 · 0 评论 -
判断质数-- 试除法判定质数(终于有人给我说明白了)
用 num%b的情况 已经用num%a 来排除了 如果a满足那么b肯定也满足 所以不用再继续遍历。所以当 a < num/a的时候 表示这个范围内可能满足它不是质数的条件。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。为什么 i从 2 开始 因为2是最小的质数 小于二的不是质数。因为如果num 可以整除a 那么如果 num /a =b;假设a为偏小的数字 那么a的平方就一定小于 num这个数字。后面又看了y总的解释 终于知道自己的缺陷在那一部分。后面发现是自己的整数概念弄反了。原创 2024-01-11 11:01:45 · 391 阅读 · 0 评论 -
二分法--数的范围(含非常重要的二分法模板和细节)
请记住一个关键点 如果check里面的条件不成立 此循环就跳出来了 那么当前的l 或者r 下标所在的位置 一定是最靠近答案的地方。第一次找到靠左边的点 使用条件 q[mid] >= x 可以让mid的值从左边靠近答案。当a[mid]=x时,待查找元素只会在mid左边,令r=mid。模板1如果此时 mid =l+r +1的时候 l +1 =r。那么mid = l+l+1 >>2 = l。那么l = mid +1 =r。原创 2024-01-10 23:47:49 · 335 阅读 · 0 评论 -
差分--差分数组快速计算L到R值相加后的数组
给定区间[l ,r ],让我们把a数组中的[ l, r]区间中的每一个数都加上c,即 a[l] + c , a[l+1] + c , a[l+2] + c , a[r] + c;首先让差分b数组中的 b[l] + c ,a数组变成 a[l] + c ,a[l+1] + c, a[n] + c;然后我们打个补丁,b[r+1] - c, a数组变成 a[r+1] - c,a[r+2] - c,a[n] - c;使得 a[i] = b[1] + b[2 ]+ b[3] +, + b[i]别着急,慢慢往下看。原创 2024-01-10 21:43:16 · 1191 阅读 · 0 评论 -
前缀和--二维矩阵的前缀和
我们计算的是s[i][j] 即表示第一张图内所有数字的总和。个询问,每个询问包含四个整数 x1,y1,x2,y2。题目中要求计算 x1,y1,x2,y2范围内的总和。行,每行包含四个整数 x1,y1,x2,y2。,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。−1000≤矩阵内元素的值≤1000。动态规划怎么利用上之前已经有的值。第一行包含三个整数 n,m,q。行,每行输出一个询问的结果。列的整数矩阵,再输入 q。个整数,表示整数矩阵。此题画图后便一目了然。原创 2024-01-10 14:29:18 · 776 阅读 · 0 评论 -
前缀和(用于计算某数组区间的总和)
但是注意需要从1开始开辟数组 涉及到边界问题。−1000≤数列中元素的值≤1000。一般用于计算某数组区间内的相加为多少。对于每个询问,输出原序列中从第 l。如果从0 开始 没有数组下标为-1。个询问,每个询问输入一对 l,r。行,每行输出一个询问的结果。,表示一个询问的区间范围。行,每行包含两个整数 l。第一行包含两个整数 n。个整数,表示整数数列。用高中数学前缀和的思想。原创 2024-01-07 20:26:05 · 449 阅读 · 0 评论 -
位运算--二进制中1的个数(含常见的二进制运算操作)
我们想查看一个数字第几位的数字 就可以用下面的方式。比如数字 x=110100 返回的就是第2位 1。的数列,请你求出数列中每个数的二进制表示中 1。功能 是返回 当前数字的最后一位1。查看数字当前第k位的数字是几?0≤数列中元素的值≤109。二进制题目中最常见的操作。个整数,表示整个数列。个数表示数列中的第 i。个数的二进制表示中 1。以图上的数字排序为例子。lowbit 具体实现。个整数,其中的第 i。原创 2024-01-07 19:28:37 · 448 阅读 · 0 评论 -
双指针--判断子序列
子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5}是序列 {a1,a2,a3,a4,a5}个整数,表示 a1,a2,…个整数,表示 b1,b2,…的整数序列 a1,a2,…的整数序列 b1,b2,…序列的子序列,输出一行 Yes。第一行包含两个整数 n,m。原创 2024-01-05 19:56:45 · 427 阅读 · 0 评论 -
双指针--- 数组元素的目标和
每次遍历指针A指向的数字和指针B指向数字相加 后面A++ 数字变大 那么B只能–让数字变小来满足条件,即此做法的时间复杂度为O(N)本题和上一题的思路差不多,可以先思考一种暴力的做法,再从暴力做法上面去优化。循环遍历两个数组 查看两个数组 相加是否为目标数 如果是目标 res++;一个指针A指向第一个数组头部,另一个指针B指向第二个数组的尾部。让指针B指向最小的那一个 即 让 B+A>目标数字 的那个。给定两个升序排序的有序数组 A。数组长度不超过 105。个整数,表示数组 A。个整数,表示数组 B。原创 2024-01-05 19:28:10 · 370 阅读 · 0 评论 -
双指针算法--最长列许不重复子序列
因为 如果j往前移动 而i往后移动 j 和 i区间被扩大了,而子区间内有重复元素 那么此大区间也必定有重复元素。双指针题目的核心思想就是把双重循环的暴力做法利用某种性质优化到o(n)的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。维护两个指针去遍历此数组的部分区域 i和j都不断往后移动。check()表示查看j i之间是否有重复元素。个整数(均在 0∼105。范围内),表示整数序列。为什么j不往前移动?原创 2024-01-05 18:19:09 · 438 阅读 · 0 评论