![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Acwing算法基础课笔记
三萬Q
一个刚开始学习算法的小白QAQ
展开
-
算法基础---区间和并
例题:区间和并---模板。原创 2024-09-03 19:57:15 · 207 阅读 · 0 评论 -
算法基础---离散化
当一组数据值域太大(例:0~10^9),而数据数量很小(例:10^5)时,值域中的数不是全都用得上的。所以需要用离散化将该组数据。例:a[]={1,3,3,100,50000};,来用数组表示这组数据,有效。原创 2024-09-03 19:15:33 · 250 阅读 · 0 评论 -
算法基础---位运算
0001k=0001,k=2,k是右移的位数,这里k = 2.(一)n的二进制表示中第k位(自右向左)是几?(二)、lowbit(x):返回x最后一位1及后面所有零。返回:x&-x 或 x&(~x+1)任何数据在计算机中都是以。进行操作,所以效率很高。总:1+2:n>>k&1。存储,位运算是指直接对。例:求二进制中1的个数。原创 2024-09-03 18:00:39 · 172 阅读 · 0 评论 -
算法基础---双指针
朴素算法在第二层遍历时,会重新开始j恢复到初始位置。但双指针则不会恢复到初始位置,在满足位置的地方继续走下去。以此减少算法的复杂度。输入一个字符每个子串之间有一个空格,让你输出每一个空格后的子串。1.快慢指针指向两段不同的内存,两指针同向移动扫描。2.对撞指针指向同一段内存,两指针反方向移动扫描。输入 abc def hij。例2:最长连续不重复子列。原创 2024-09-02 20:08:06 · 215 阅读 · 0 评论 -
算法基础---拓扑序列
∵一定存在一个入度为0的点。一、理解:有向无环图(亦称拓扑图)必有拓扑序列。出度:多少条边从该点指出。入度:多少条边指向该点。原创 2024-09-02 19:36:30 · 125 阅读 · 0 评论 -
算法基础---深搜(DFA)与广搜(BFS)
1、思路:先找一条路走到头无路可走记录方案并回退一格继续向下搜以此递归。2、注意:1、为减少算法复杂度需要记录之前遍历的结果,后直接调用即可。2、递归之后需要恢复现场。一层一层搜,当每一次搜索的权重相同时可以求”二、深度优先搜索(DFS)三、广度优先搜索(BFS)原创 2024-09-01 17:02:34 · 512 阅读 · 0 评论 -
基础算法---差分(前缀和逆运算)
接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。因为a数组为b数组的前缀和,∴b[i]+c 可使a[i]及以后每个a都变为a[i]+c。利用性质我们可以求【l,r】的a+c序列。(先b[l]+=c,再b[r+1]-=c)也就是说差分可以相当于数列中的an,前缀和可以看为Sn。接下来m行,每行包含三个整数l,r,c,表示一个操作。an的前缀和,b1……共一行,包含n个整数,表示最终序列。第二行包含n个整数,表示整数序列。使ai=b1+b2+……原创 2024-09-01 09:56:39 · 158 阅读 · 0 评论 -
基础算法---前缀和
2.求区间和:【l,r】Sr-Sl-1=al+……ar 算法复杂度为o(1),需先预处理……其前缀和为si = a1+a2+∴求和:Sx2y2-Sx2,y1-1-Sx1-1,y2+Sx1-1,y1-1。类似于高中的数列sn为a的前n项和……因为x1,x2,y1等均为整数所以应以虚线位置计算面积。一、思想:有一数组a1,a2。原创 2024-08-30 21:28:45 · 218 阅读 · 0 评论 -
算法基础---高精度
在c++中int等存储类型最高只能计算少位整数,再大就超出存储空间了。这就需要用数组来存储大整数(例:整数的位数原创 2024-08-30 20:59:47 · 456 阅读 · 0 评论 -
算法基础---二分
2、检查mid是否不满足,若是则mid在右区间答案在【l,mid】反之同理。1、mid=(l+r+1)/2//加一原因:向下取整,防止死循环。2、检查mid是否满足,若是则mid在左区间,答案在【mid,r】①左边是满足某个条件的 ②右边是不满足的。(一)、思路:二分出边界点(①和②)方法一 :找边界点②。方法二 :找边界点①。原创 2024-08-30 09:10:49 · 267 阅读 · 0 评论 -
基础算法----排序
注:当基准数选择最左边的数字时,那么就应该先从右边开始搜索;当基准数选择最右边的数字时,那么就应该先从左边开始搜索。不论是从小到大排序还是从大到小排序!2️⃣调整区间:分成小于x和大于等于x两部分。(用双指针(对撞))2.思路 1️⃣确定分界点(找个基数x):q[l],q[r]等。3️⃣递归处理左右两段。分治思想:先拆成最小单元,再按顺序依次归并。(二)模板:从小到大排序(大到小同理)3.归并(合二为一)用快慢指针。1.核心思想:分治---分而治之。(一)思想----分治。原创 2024-08-30 08:39:13 · 284 阅读 · 0 评论