![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构+算法
数据结构/算法的实用/应用总结,偏实用主义。
GOD_Dian
小白白一枚
展开
-
C++ string中的find()函数
1.string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。(返回值可以看成是一个int型的数) 1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 using namespace std; 5 int main() 6 { 7 ////find函数返回类型 size_type 8 string s("...转载 2020-08-27 22:36:04 · 3382 阅读 · 0 评论 -
pow函数的返回值
记录一下这个坑:pow(n,m)的返回值是浮点数double类型#include<iostream>#include<cmath>using namespace std;int main(){ int n=60; cout<<pow(2,60); cout << endl; printf("%lld",pow(2,60));...原创 2020-04-30 20:13:58 · 5657 阅读 · 2 评论 -
STL set用法小结(交并差补)
常见的方法略特点set和map按照key的字典序维护树,当题目要求按某个量的字典序时,可以插入set/map中,再输出。set的增删查改都是logn方法介绍countmax_size()upper_bound()lower_bound()结构体的setset的合并set的交并差补交并差补四个函数的参数相同,常用版本中都是5个参数,set_xxxx(set1...原创 2020-02-28 17:51:28 · 890 阅读 · 0 评论 -
string表示的数字不能直接比较 PAT 7-27 宿舍谁最高?
题面输入样例7000000 Tom 175 120000001 Jack 180 130000001 Hale 160 140000000 Marry 160 120000000 Jerry 165 110000003 ETAF 183 145000001 Mickey 170 115输出样例000000 Tom 175 120000001 Jack 180 13000...原创 2020-02-27 17:57:41 · 329 阅读 · 0 评论 -
C++字符串转换为数值型
引言字符串处理中,常常需要把字符串转换成数值型。方法有很多,这里总结两种比较简单的方法。方法一C++自带函数atoi(char *s)函数原型#include<cstdlib>atoi(char *s);参考代码:#include<iostream>#include<cstdlib>using namespace std;int ...原创 2020-02-26 23:50:01 · 3181 阅读 · 0 评论 -
C++自带的全排列函数 next_permutation()
函数原型include<algorithm>bool next_permutation(iterator strat,iterator end);用法若当前序列不存在下一个排列时,返回false,否则返回true。next_permutation按照字典序升序趋势,从当前状态向后做全排列。也即,如果导入2,1,3.函数只会从213开始向后找其他排列。如231,312,32...原创 2020-02-26 23:24:56 · 489 阅读 · 0 评论 -
无指定输入个数输入
int i=0;while(cin >> x[i] >> y[i]){ i++;}控制台中应按ctrl+z结束输入;这并不会影响oj的输入判断原创 2020-02-19 23:36:10 · 139 阅读 · 0 评论 -
字符串操作
1.子串1.1复制子串string s;s.substr(s_first_itor,s_last_itor);1.2子串查找string s;string t;s.find(t);//默认区间头至尾s.find(first_itor,last_itor,t)//指定位置区间查询1.3子串替换string s;string t;s.replace(s_first_itor,...原创 2020-02-19 23:32:59 · 74 阅读 · 0 评论 -
用fill给二维数组赋值
#用fill函数给一维赋值:int num[maxn];fill(num,num+maxn,-1);或者fill(num,num+n,-1);指定数组长度赋值#用fill给二维数组赋值:int num[maxn][maxn];fill(num[0],num[0]+maxn*maxn,-1);//值得注意的是,给二维数组赋值时,首地址必须写num[0]。...原创 2020-02-19 15:57:35 · 4018 阅读 · 0 评论 -
PTA7-36 电话聊天狂人
#include<iostream>#include<algorithm>#include<string>using namespace std;int main(){ int n,o=0; cin>>n; string str[2*n]; for(int i=0;i<2*n;i++){ cin>>str[i]...原创 2020-01-28 15:58:17 · 472 阅读 · 0 评论 -
去掉多余的空格
#去掉多余的空格 int n; cin>>n; getchar();//丢掉输入n后面的回车 string s; for(int i=0;i<n;i++){ getline(cin,s); for(int j=0;j<s.length();j++){ if(s[j]==' '){ if(j==0){ s.erase(s.begi...原创 2020-01-05 19:26:40 · 293 阅读 · 0 评论 -
leetcode两数之和 梳理哈希法的应用
文章目录1. 解法一:暴力枚举O(n^2)2. 解法二:双指针O(nlogn)3. 解法三:哈希表O(n)两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]1. 解法一:暴力原创 2020-08-21 14:45:25 · 135 阅读 · 0 评论 -
算法-搜索专题 Flood Fill算法
Flood Fill算法也叫“泛洪算法”,直观上有种,在宣纸上滴墨水,渐次染开的感觉。在图像处理中常常被用到。利益相关:题、图来自AcWingAcWing1.一句话概括多重循环遍历整个空间,对满足条件的元素:以该元素为起点,做BFS。时间复杂度为O(n),常被用来求解与图的连通集相关的题目,大致有一下应用:连通集的大小连通集的个数多点之间的连通性2.伪代码3.举例3.13.2图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分.原创 2020-06-15 22:53:24 · 448 阅读 · 0 评论 -
欧几里得算法(辗转相除法)求最大公约数
欧几里得算法求最大公约数Sometimes your whole life boils down to one insane move.人这一辈子,有时就得靠一次疯狂的举动才能扭转乾坤。------------------《阿凡达》文章目录欧几里得算法求最大公约数一、介绍欧几里得二、实现思路三、核心思想四、优点五、核心代码一、介绍欧几里得 像所有博客一样,出于尊重,介绍一下这位...转载 2019-10-02 21:33:31 · 765 阅读 · 0 评论 -
dp问题系列-资源型(四)分组背包
这里是引用原创 2020-05-07 22:36:21 · 120 阅读 · 0 评论 -
dp问题系列-资源型(三)多重背包
这里是引用原创 2020-05-07 22:06:00 · 178 阅读 · 0 评论 -
dp问题系列-资源型(二)完全背包
这里是引用原创 2020-05-07 17:38:40 · 151 阅读 · 0 评论 -
dp问题系列-资源型(一)01背包
dp问题概述与分类这里是引用其中右边是常考常见的dp类型,尤其是资源型(背包问题)和四大dp——数位dp,区间dp,状压dp,概率dp最为常见。背包问题概述参考博客背包九讲资源型dp最经典的就是背包问题,背包问题本身也是一个很重要很广泛的问题,相关问题可以划分为:其中最常见的类型毫无疑问是右边4个,因此,这里介绍的时候也会是重点介绍,而左边的问题也会简要介绍看看我啥时候能...原创 2020-05-03 23:48:34 · 321 阅读 · 0 评论 -
最小生成树总结2 kurskal算法
最小生成树总结1 prim算法最小生成树总结2 kurskal算法文章目录1.kruskal算法流程2.模板3.板子题1.kruskal算法流程将所有边按照权重大小从小到大排序(O(mlogm)枚举每条边(a,b,w)if 点a和点b不连通将(a,b,w)加入集合Notes:(1)什么情况下不存在最小生成树?集合中边数小于n-1(2)用结构体存储边,而非用邻接表或邻接矩阵...原创 2020-04-26 21:43:03 · 243 阅读 · 0 评论 -
最小生成树总结1 prim算法
1.最小生成树问题概述给定带权节点网络,从中确定一个包含所有节点(n个),n-1条边,所有节点相互连通的树,使得这颗树的所有边权之和最小。Notes:堆优化prim算法一般不会用到,具体而言,优化思路与堆优化的dijkstra类似。一般用kurskal算法解决稀疏图上的最小生成树问题。最小生成树问题,一般是无向图,无所谓边权的正负。2.Prim算法流程初始化各点到集合的距离...原创 2020-04-26 18:04:32 · 966 阅读 · 0 评论 -
最短路总结5 floyd
这里是引用原创 2020-04-25 10:14:10 · 241 阅读 · 0 评论 -
最短路总结4 SPFA及应用
1.spfa算法2。模板3.应用1:spfa求最短路4.应用2:spfa判断负环原创 2020-04-25 12:32:40 · 198 阅读 · 0 评论 -
最短路总结3 BellmanFord
这里是引用原创 2020-04-25 11:04:57 · 141 阅读 · 0 评论 -
最短路总结2 堆优化dijkstra
这里是引用原创 2020-04-25 09:44:53 · 330 阅读 · 0 评论 -
最短路总结1 最短路问题概述与朴素dijkstra
这里是引用原创 2020-04-24 16:51:21 · 308 阅读 · 0 评论 -
树和图的DFS和BFS遍历
树和图的DFS和BFS遍历,本质是dfs和bfs搜索在图论中的应用,逻辑都是一样的,不一样或者说需要注意的是:在数和图中往往每个节点只会被访问一次。此外,实现方式也略有不同。时间复杂度都是O(n+m)。DFS模板int dfs(int u){ st[u] = true; // st[u] 表示点u已经被遍历过 for (int i = h[u]; i != -1; i = ...原创 2020-04-02 19:36:13 · 349 阅读 · 0 评论 -
数据结构——堆的实现
堆的本质是一棵完全二叉树,在计算机体系中占据非常重要的地位,面试也经常会遇到。在C++中,priority_queue就是堆,在算法竞赛中,常常用堆优化最短路(迪杰斯特拉)算法。堆的基本知识堆分为大根堆和小根堆,分别是指root在当前树结构中值最大(最小)。下述讲解均以小根堆为例。堆是完全二叉树,完全二叉树满足的性质它都满足:i节点的左子节点为2i,右子节点为2i+1堆的基本功能...原创 2020-03-30 21:28:34 · 125 阅读 · 0 评论 -
双指针 最长连续不重复子序列
双指针双指针严格来讲,算不上不一种算法,应该称为一种技巧。它的作用是通过巧妙地转换,将朴素地多重循环,转为双指针,从而把时间复杂度从O(n^2)降到O(n)双指针的一贯做法先考虑最朴素的做法考虑将朴素做法优化到双指针最长连续不重复子序列最长连续不重复子序列思路朴素思路——双重循环存在性质:一个不重复序列的子序列也一定是不重复序列因此,只需要对数组遍历作为右端点,如出...原创 2020-03-15 00:17:13 · 175 阅读 · 0 评论 -
简单位运算入门
左移右移int x;x >> i//除以2^i,强制取整x << i;//乘以2^iint main(){ int x = 7; cout << "x: i x<<i" << endl; for(int i=0;i<=4;i++) cout << x <<": "<<...原创 2020-03-13 22:11:23 · 307 阅读 · 1 评论 -
求解逆序对问题以及逆序对的应用
引言给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。输入格式第一行包含整数n,表示数列的长度。第二行包含 n 个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1≤n≤1000001≤n≤100000...原创 2020-03-02 17:24:12 · 795 阅读 · 0 评论 -
关键路径求解与AOE
前言:首先关键路径是针对DAG图来说的,我们通常用AOE网来表示一个工程的进行过程,AOV网可以转换为AOE网,AOE网是没有环的,通常关键路径求解需要弄清楚以下四个概...转载 2020-02-27 15:59:59 · 402 阅读 · 0 评论 -
拓扑排序(PTA7-25 任务调度的合理性)
在计算机科学领域,有向图的拓扑排序是其顶点的线性排序,使得对于从顶点 uuu 到顶点 vvv 的每个有向边 uvuvuv, uuu 在排序中都在 vvv 之前。 例如,图形的顶点可以表示要执行的任务,并且边可以表示一个任务必须在另一个任务之前执行的约束; 在这个应用中,拓扑排序只是一个有效的任务顺序。 如果且仅当图形没有定向循环,即如果它是有向无环图(DAG),则拓扑排序是可能的。 任何 DAG 具有至少一个拓扑排序,并且已知这些算法用于在线性时间内构建任何 DAG 的拓扑排序。 用一种容器(比如栈,队列,原创 2020-02-23 21:44:04 · 985 阅读 · 0 评论 -
图的表示-基于vector的邻接表和邻接矩阵的实现
用vector实现邻接矩阵存储图用vector实现邻接表存储图原创 2020-02-23 13:46:37 · 677 阅读 · 0 评论 -
高精度算法
1.高精度算法大数运算的实质就是用数组代替变量进行竖式运算个位 十位 百位a[1] a[2] a[3] b[1] b[2] b[3] c[1] c[2] c[3] 1.1高精度加法c[1] += a[1]+b[1];//求和c[2] +=c[1]/10;//进位c[1] %= 10;//更新数位添加链接描述](https://www.luogu.com.cn/proble...原创 2020-02-21 21:04:48 · 126 阅读 · 1 评论