- 博客(5)
- 收藏
- 关注
原创 【算法】单源最短路径(Spfa)
算法描述 给定一个有向图,求一个出发点到达其它点的最短距离 大致思路 1.用对象数组存储每一条路径的起点、终点、权值 2.用队列记录最短路径被改变的点 3.用邻接表作为图的存储结构 4.遍历邻接表并进行松弛操作 5.判断是否有负环 6.返回源点到达各节点的最短位置 关键点: 1.创建Node类用来创建对象数组进行存储具体路径权值 2.用邻接矩阵或邻接表作为图的存储结构,前者适合稠密图,后者适合稀疏图 3.遍历邻接表并进行松弛操作,通过更新边的值来不断更新最短路,并判断是否有负环 代码实现 //时间复
2021-05-28 00:18:35 282
原创 【算法】字符串的模式匹配(KMP)
【算法】字符串的模式匹配(KMP) 算法描述 给定两个长度的字符串r1和r2,求一个较长字符串是否包含另一个较短字符串且位置在哪里 大致思路 1.prefix数组记录最长公共前后缀 2.根据prefix数组进行子串与主串的模式匹配 3.返回数组下标位置 关键: prefix[k]的值代表的是下标为k的字符前面的字符串最长公共前后缀的长度,也表示该处字符不匹配时应该回溯到的字符的下标 代码实现 //时间复杂度O(m+n) import java.util.Scanner; public class
2021-05-27 01:53:47 264
原创 【算法】最长公共上升子序列(LCIS)
【算法】最长公共上升子序列(LCIS) 算法描述 给定两个长度的字符串r1和r2,求既是r1的子序列又是r2的子序列且该子序列为单调递增的字符串长度最长为多少 子序列:序列的一部分项按原有次序排列而得到的序列 大致思路 1.若两个字符串中只要出现其中一个没有元素,返回0 2.创建一个记录到达对应位置的公共子序列个数的dp二维数组 3.用两层for循环比较,两层都从第2个元素开始,错位逐个记录出dp二维数组的元素的值 4.元素判断是否相等,判断是否为上升序列 5.返回最大的dp数组值 代码实现 //时
2021-05-26 17:10:40 747
原创 【算法】最长公共子序列(LCS)
【算法】最长公共子序列(LCS) 算法描述 给定两个长度的字符串r1和r2,求既是r1的子序列又是r2的子序列的字符串长度最长为多少 子序列:序列的一部分项按原有次序排列而得到的序列 大致思路 1.若两个字符串中只要出现其中一个没有元素,直接返回0 2.创建一个记录到达对应位置的公共子序列个数的dp二维数组 3.用两层for循环比较,两层都从第2个元素开始,错位逐个记录出dp二维数组的元素的值 4.元素比较若相等,dp[i][j] = dp[i-1][j-1]+1 5.元素比较若不相等,dp[i][j
2021-05-26 03:04:48 510
原创 【算法】最长上升子序列(LIS)
【算法】最长上升子序列(LIS) 算法描述 给定一个长度为n的字符串r,求数值单调递增的子序列的长度最长为多少 大致步骤 1.创建一个记录到达对应位置的上升子序列个数的dp数组 2.若字符串只有1个元素,元素本身就构成了最长上升子序列,因此全部元素初始化1 3.用两层for循环比较,第一层从第2个元素开始,逐个记录出dp数组的元素的值 4.第二层用将小于i的前面所有数组元素都进行比较大小 5.判断若为递增,则将记录到达i元素时,已经累计多少个上升子序列个数赋值给dp数组 6.最后创建一个变量并返回最大的d
2021-05-26 01:34:09 491 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人