![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++算法
向天再借500年
这个作者很懒,什么都没留下…
展开
-
c++ stl(4)map容器
map的定义 map<typename1,typename2> mp; map<int,int> mp; map<string,int> mp; map<set<int>,string> mp;map需要确定映射前类型(键key)和映射后类型(值 value) <>内填写两个类型,其中第一个键的类型,第二个是值的类型,如果是字符串到整形的映射,必须使用string而不用char数组类型map容器的内元素的访问原创 2020-10-15 22:35:11 · 131 阅读 · 0 评论 -
c++ STL (3)string容器
string 的定义string类的定义定义string类的方式跟基本数据类型相同,只需要在string后跟上变量名即可string str;如果要初始化,可以直接给string类进行赋值string str="hello";string类的访问直接通过下标访问 string str="abcdef"; for(int i=0;i<str.length();i++){ cout<<str[i]; } 如果要读入和输出字符串只能用cin和cout ci原创 2020-10-14 11:33:55 · 93 阅读 · 0 评论 -
c++ STL容器(2)set容器
set翻译为集合,是一个内部自动有序且不含重复元素的容器set的定义set<typename> name;set<int> vi;set<double> vi;set<char> vi;set<node> vi;//node可以是结构体set<int> a[100]; //数组里面每个元素都是一个set集合insert(x) 将x插入set容器中,并自动递增排序和去重 //insert(x) 将x插入set容器中原创 2020-10-09 14:45:28 · 241 阅读 · 0 评论 -
c++STL(1)vector容器
vector被翻译为向量也称作变长数组1.vector的定义vector<typename> name;vector<int> vi;vector<double> vi;vector<char> vi;vector<node> vi;//node可以是结构体push_back(x) 在vi的元素末尾添加一个元素xfor(int i=1;i<=5;i++){ vi.push_back(i);} vi.size()原创 2020-10-09 11:50:21 · 124 阅读 · 0 评论 -
数组模拟手写一个堆
堆也就是c++stl容器中是priority_queue,但是不支持删除任意一个元素,所以手写一个堆和一些基本操作原创 2020-05-18 11:12:00 · 134 阅读 · 0 评论 -
双指针算法(two pointers)
给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。请你求出满足A[i] + B[j] = x的数对(i, j)。数据保证有唯一解。输入格式第一行包含三个整数n,m,x,分别表示A的长度,B的长度以及目标值x。第二行包含n个整数,表示数组A。第三行包含m个整数,表示数组B。输出格式共一行,包含两个整数 i 和 j。数据范围数组长度不超过100000。同一数组内元素各不相同。1≤数组元素≤109输入样例:4 5 61 2 4 73 4 6 8 9原创 2020-05-10 14:40:42 · 412 阅读 · 0 评论 -
最小生成树(kruskal)
伪代码res 最小生成树中的权重之和cnt 当前加了多少条边将所有边按权重排序O(mlogm)枚举每条边(并查集应用) if a,b 不连通 加入集合#include <iostream>#include <cstring>#include <algorithm> using namespace std;const ...原创 2020-03-31 20:01:28 · 86 阅读 · 0 评论 -
最小生成树(prime算法)
**伪代码**S:当前已经在联通块中的所有点的集合 dist[i] = inf for n 次 t<-S外离S最近的点 利用t更新S外点到S的距离 st[t] = true n次迭代之后所有点都已加入到S中Dijkstra算法是更新到起始点的距离,Prim是更新到集合S的距离#include <iostream>#inclu...原创 2020-03-31 18:13:05 · 435 阅读 · 0 评论 -
筛法判断素数
1.埃氏筛选法#include <iostream>#include <algorithm>using namespace std;const int maxn=1e6+10;int n,num;int ans[maxn];//ans数组用来存放质数bool p[maxn];//p[i], i为质数则为false否则为truevoid find_prim...原创 2020-03-22 17:18:46 · 384 阅读 · 0 评论 -
floyd算法
floyd算法是通过动态规划特别是记住公式,f[i, j, k]表示从i走到j的路径上除i和j点外只经过1到k的点的所有路径的最短距离。那么f[i, j, k] = min(f[i, j, k - 1), f[i, k, k - 1] + f[k, j, k - 1]。因此在计算第k层的f[i, j]的时候必须先将第k - 1层的所有状态计算出来,所以需要把k放在最外层。那为什么判断不连通的条...原创 2020-03-18 17:14:26 · 201 阅读 · 0 评论 -
bellman - ford
什么是bellman - ford算法?可以用来求不超过k条边(有负权边)的最短路,也可以求是否存在负环,但时间复杂度较高,因此其他求存在负边的最短路,一般用spfa算法Bellman - ford算法是求含负权图的单源最短路径的一种算法,其原理为遍历所有的边连续进行松弛,在每次松弛时把每条边都更新一下,若在n-1次松弛后还能更新,则说明图中有负环,因此无法得出结果(通俗的来讲就是:假...原创 2020-03-17 21:29:48 · 153 阅读 · 0 评论 -
数组模拟单链表
为什么使用数组来模拟链表如果数据规模很大, 一个一个的new操作太慢了, 会超时,使用数组会大大加快速度,数组模拟速度会比结构体那样快实现一个单链表,链表初始为空,支持三种操作:(1) 向链表头插入一个数;(2) 删除第k个插入的数后面的数;(3) 在第k个插入的数后插入一个数现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第k个插入的数...原创 2020-03-09 17:23:05 · 191 阅读 · 0 评论 -
kmp
如果s[i] != p[j+1] 时,令k=ne[j] ,k就是使最长前缀=后缀长度移动的最短距离由匹配数组ne的含义可知 p[1..k] = p[j-k+1..j]#include <iostream>#include <vector>#include <cstring>#include <algorithm>using namesp...原创 2020-03-08 21:49:58 · 74 阅读 · 0 评论 -
spfa
SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环。SPFA一般情况复杂度是O(m)O(m) 最坏情况下复杂度和朴素 Bellman-Ford 相同,为O(nm)O(nm)。式子dist[b] = dist[a] + w,dist[b]能更新的条件是dist[a]被更新过变小dist[b]才会变小,所以spfa算法就使用...原创 2020-03-08 21:16:59 · 106 阅读 · 0 评论 -
Dijkstra算法
Dijkstra用于权值都为正的最短路求解,当有负权值时不能使用Dijkstra稠密图用邻接矩阵法稀疏图用邻接表法稠密图(点少变多)稀疏图(点多变少)1.邻接表法(用堆(优先队列)优化)#include <iostream>#include <algorithm>#include <cstring>#include <queue>...原创 2020-03-07 21:17:35 · 190 阅读 · 0 评论 -
单调栈(找到左边最小的数)
给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。输入格式第一行包含整数N,表示数列长度。第二行包含N个整数,表示整数数列。输出格式共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。数据范围1≤N≤1051≤数列中元素≤109输入样例:53 4 2 7 5输出样例:-1 3 -1 2 2...原创 2020-03-07 21:07:18 · 540 阅读 · 0 评论 -
拓扑排序
作用:判断是否存在环1.数组模拟队列#include <iostream>#include <vector>#include <cstring>#include <algorithm>using namespace std;const int maxn=1e5+10;int h[maxn],e[maxn],ne[maxn],idx...原创 2020-03-07 21:00:56 · 107 阅读 · 0 评论 -
字符串hash
字符串哈希给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2,请你判断[l1,r1]和[l2,r2]这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数n和m,表示字符串长度和询问次数。第二行包含一个长度为n的字符串,字符串中只包含大小写英文字母和数字。接下来m行,每行包含四个整数l1,r1,l2...原创 2020-02-05 18:46:46 · 156 阅读 · 0 评论 -
普通数字哈希
常见哈希模拟散列表维护一个集合,支持如下几种操作:“I x”,插入一个数x;“Q x”,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为”I x”,”Q x”中的一种。输出格式对于每个询问指令“Q x”,输出一个询问结果,如果x在集合中出现过,则输出“Ye...原创 2020-02-05 18:43:24 · 1261 阅读 · 0 评论 -
高精度除法
#include <iostream>#include <vector>#include <algorithm>#include <string>using namespace std;vector<int> div(vector<int> a,int b,int &r){ vector<int&g...原创 2020-01-29 10:54:18 · 127 阅读 · 0 评论 -
高精度乘法
#include <iostream>#include <vector>#include <string>using namespace std;vector<int> mul(vector<int> a,int b){ vector<int> c; int t=0; for(int i=0;i<a.si...原创 2020-01-29 10:30:59 · 98 阅读 · 0 评论 -
高精度加减法
#include <iostream>#include <string>#include <algorithm> #include <vector>using namespace std;vector<int> c;vector<int> add(vector<int> &a,vector&l...原创 2020-01-29 10:03:59 · 126 阅读 · 0 评论 -
lowbit
(lowbit) O(nlogn)O(nlogn)使用lowbit操作,进行,每次lowbit操作截取一个数字最后一个1后面的所有位,每次减去lowbit得到的数字,直到数字减到0,就得到了最终1的个数,lowbit原理根据计算机负数表示的特点,如一个数字原码是10001000,他的负数表示形势是补码,就是反码+1,反码是01110111,加一则是01111000,二者按位与得到了1000,...原创 2020-01-28 18:35:33 · 280 阅读 · 0 评论 -
高精度加法
#include <iostream>#include <algorithm>#include <string>#include <cstring>using namespace std;struct data{ int p[1010]; int len; data(){ memset(p,0,sizeof(p));//初始化数...原创 2020-01-23 11:41:22 · 66 阅读 · 0 评论 -
归并排序
#include <iostream>#include <algorithm>using namespace std;const int maxn=1e5;int ans[maxn],temp[maxn];//temp为辅助数组void gb_sort(int ans[],int l,int r){int i,j,mid,k;if(l>=r){//只...原创 2020-01-18 18:34:41 · 109 阅读 · 0 评论 -
快速排序
#include using namespace std;const int maxn=1e5+10;int ans[maxn];void quicksort(int ans[],int l,int r){int mid,x,i,j;//两个指针,分别标记左边和右边边界mid=(l+r)/2;x=ans[mid];i=l-1;j=r+1;if(l>=r){ retur...原创 2020-01-17 19:27:49 · 135 阅读 · 0 评论