-
线性筛 & 埃氏筛
埃氏筛(伪代码):
1
2遍历:
若为没被标记,则从其本身开始标记其的整数倍;线性筛(伪代码):
1
2
3
4
5遍历:
1. 若为没被标记,放入质数表;
2. 枚举质数表中的数:
2.1 标记(枚举到的数*枚举到的质数)
2.2 若枚举到的数为枚举到的质数的整数倍,则退出循环
-
分治
- 概念: 将一大任务分成两个近似的较小任务解决,最后再合并(类似递归)。若平均分后仍无法解决,则继续分。
- 典型例子:
- 快速排序(伪代码):
1
2
31. 先随机找一个参照值,去应为小的那边找比其大的(反之则找比其小的),并标记
2. 将标记过的比其大的和比其小的交换
3. 再将数组分成两半,两半分别重复所有动作,直至仅剩一个元素- 归并排序(伪代码):
1
2
31. 将数组分成两半,直至操作的那个数组仅剩一个元素
2. 跳回上一步,与上一步分出的另一个数组有序地合并(若另一个数组已执行了相同步骤,即其有序。若无序,则让另一个数组执行1. )
3. 重复执行2. ,直至有序
-
链表
:
-
二分
找最前面的该数代码:
1
2
3
4
5
6while (l <= r) {
int mid = (r - l) / 2 + l;
if (a_y[mid] >= a_x[i]) r = mid - 1;
else l = mid + 1;
}
注意:l为这个数找最后面的该数代码:
1
2
3
4
5
6while (l <= r) {
int mid = (r - l) / 2 + l;
if (a_y[mid] > a_x[i]) r = mid - 1;
else l = mid + 1;
}
注意:l为其下表+1的数**重点注意:**若没找到,r和l分别为其左右最接近的数
-
sizeof()
sizeof(对象)可以求一个对象所占的字节数
-
memset()
memset( 对象 , 要成初始化的数 , 初始化的字节数 )可以初始化一个对象的几个字节为同一个数
-
指针
1
2
3
4int a;
int *p=&a;//指针变量p存储变量a的地址
*p//解引用:在这是表示指针变量p所存的地址的值
int b=&a;//引用:在这是将变量b本身的地址设为变量a本身的地址(他们用同一个地址)
-
结构体
1
2
3
4
5
6
7
8
9
10
11
12
13
14struct a{
int x;
int y;
friend bool operator<(Node a,Node b){//该结构体的朋友函数
//“operator<”为重定义运算符“<”
return a.dis>b.dis;
}
//该做法可用于在优先队列中使用结构体的情况。
}x;//可直接在这此这样定义
a x;//也可这样定义
&x//为该结构体第一项的地址(数组也同样)
&x+n//为该结构体第1+n项的地址(数组也同样)
x//该结构体的第一项(数组也同样)
x+n//为该结构体第1+n项的地址(数组也同样)
-
const
const是常量修饰符,被它修饰的变量在初始化后无法被修改
-
DFS(深度优先搜索)模板
1 | void dfs( int pos ){ |
-
BFS(广度优先搜索)模板
1 | while(队列判空){ |
-
strcmp()
strcmp(S1,S2)可以判断两个字符串(在这是S1和S2)是否一致
-
map
概念: map以<key,value>键值对的形式存储,且map的内部自建一个红黑树,使得其可以自动排序。
特点:
-
第一个可以称为关键字(key),每个关键字只能在map中出现一次;
-
第二个可以称为该关键字的值(value);
-
key既不能重复也不能被修改
用处: map在做数据映射的时候能够非常简便的完成代码构建,并且保持查询高效。
-
1 |
|
-
set
概念: set里面每个元素只存有一个key,它支持高效的关键字查询操作。
特点:
-
储存同一类型的数据元素(这点和vector、queue等其他容器相同)
-
每个元素的值都唯一(没有重复的元素)
-
根据元素的值自动排列大小(有序性)
-
无法直接修改元素
-
高效的插入删除操作
用处: set就是关键字的简单集合。当只是想知道一个值是否存在时,set是最有用的
-
1 |
|
-
栈
1 |
|
-
队列(所有)
1 |
|
-
快读快写
1 | inline int read(){ //快读,用getchar()来代替输入 |
-
freopen()
作用: 重定向标准输入或输出
1 | freopen("文件名","读或写(r或w)",重定向标准输入还是输出(stdin还是stdout)); |
-
vecotor(动态数组)
1 |
|
-
pair
1 |
|
-
dijkstra最短路径(图)算法
时间复杂度:
限制: 只能解决无负权、单源(单一源头)的图的问题
特点: dis数组中的最小值一定为最短路
tips: 堆优化版本时间复杂度更小,特点、限制一样伪代码:
1 | void dj(){ |
**代码:**
1 | void dj(){ |
-
dijkstra最短路径(图)算法(堆优化)
时间复杂度: O((m+n)× log(n))
限制 & 特点: 同优化前伪代码:
1 | void dj(){ |
**代码:**
1 | struct Node{ |
-
top(拓扑排序)
1 |
|
-
Floyd最短路径(图)算法
时间复杂度:
限制: 可解决有负权、多源(多源头)的图的问题
特征: dp数组(没错,是动态规划)中的最小值一定为最短路伪代码:
1 | for (中转点 k) { |
**代码:**
1 |
|

