![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础算法
Willard Leozi
少年把盏饯行杯
这一杯
我敬年少逐梦不悔
这一杯
我敬他日衣锦还乡
展开
-
寻找字符串A中完全包含字符串B的最短子字符串
基本思路:已知两个字符串a和b。字符串a的字符有可能重复,字符串b中的字符不重复。编写一个算法,寻找字符串a的最短子字符串,使得该子字符串包含字符串b中的所有字符。这是一道典型的动态规划题,有点类似编程之美中最短摘要生成那道题目。可以使用两个指针t_rear和t_front遍历字符串a。使用两个指针rear和front记录已发现的最短字符串的边界。使用一个变量cnt记录已经发现...原创 2021-01-15 18:10:32 · 5761 阅读 · 0 评论 -
Fib数列问题
时间限制 2000ms 空间限制 65536KB 题目:Fib数列是这样的数列: 1,1,2,3,5,8,13,21,,,,,,. 你能确定它的第n项吗,假设它的第n项为N,你需要编程解决对于另一个输入数M,N % M的值.输入:本题只有一组测试数据!! 第一行有用空格隔开的两个整数T,M. (1 <= T,M <= 100000) 以下有T行数据,每...原创 2021-01-15 18:12:47 · 1285 阅读 · 0 评论 -
矩阵快速幂
(1)矩阵乘法简单的说矩阵就是二维数组,数存在里面,矩阵乘法的规则:A*B=C其中c[i][j]为A的第i行与B的第j列对应乘积的和,即:模板 :const int N=10;int tmp[N][N];void multi(int a[][N],int b[][N],int n){ memset(tmp,0,sizeof tmp); for(int i...原创 2021-01-15 18:12:27 · 135 阅读 · 0 评论 -
树的直径
树的直径定义:一棵树的直径就是这棵树上存在的最长路径。树的直径的求法与结论:两次dfs或bfs。第一次任意选一个点进行dfs(bfs)找到离它最远的点,此点就是最长路的一个端点,再以此点进行dfs(bfs),找到离它最远的点,此点就是最长路的另一个端点,于是就找到了树的直径。树的直径的证明:假设此树的最长路径是从s到t,我们选择的点为u。反证法:假设搜到的点是v。1、v在这条最长路径...原创 2021-01-15 18:12:05 · 1072 阅读 · 2 评论 -
邻接表
邻接表和邻接矩阵的选择问题:邻接表与邻接矩阵有相似的作用:用于储存一个图中所有的节点,但是邻接矩阵比较浪费内存,当数据较小时,邻接矩阵还可以计算,但是一旦数据较大,用邻接矩阵往往就会超时或者超内存,这时就要使用邻接表来存图了;为方便理解邻接矩阵与邻接表的储存方式。如下所示:给出几组数据。1 103 58 9我们将所给的点标记为1(红色),其余...原创 2021-01-15 18:11:37 · 1554 阅读 · 0 评论 -
并查集的最大集合与集合个数
并查集的最大集合:就是指输入所有关系后,分成了很多的不同集合,最大集合就是那些不同的集合种包含元素最多的集合所包含的元素的多少。集合个数:就是指输入所有关系后,这些不同集合有多少个。解决思路:就是在普通的并查集模板中加入一个记录数组num[],这个数组可以标记每个元素的权值的最大和和最大集合的元素个数。代码:#include<iostream>#include&...原创 2021-01-15 18:11:05 · 2080 阅读 · 0 评论