
数据结构和算法
MrFengZH
这个作者很懒,什么都没留下…
展开
-
Dijkstra(迪杰斯特拉)算法的 java 实现
迪杰斯特拉算法解决的问题是:在一个有向图中,求图中一个节点到其他所有节点的最短距离算法思路:每次选取一个离出发点最近且未标记的节点,调整出发点到以这个节点为中心的周边节点的最短距离。这个过程持续 n - 1 次,直到所有节点都遍历完毕。假设有一个这样的图(图片出处:Dijkstra算法Java实现):求节点 1 到其他节点的最短距离,代码实现如下:public class Tes...原创 2020-03-06 20:38:59 · 536 阅读 · 0 评论 -
选择排序及其优化
一般的选择排序 public void selectionSort(int[] a) { int minIndex; // 记录每一轮的最小值索引 for (int i = 0; i < a.length - 1; i++) { // 选出最小值赋给 a[i],a[i] 前面的数都已排好序 minI...原创 2019-11-18 16:30:00 · 1023 阅读 · 3 评论 -
冒泡排序及其优化(三种优化)
文章目录普通的冒泡排序优化一:设置标志位优化二:设置结束边界优化三:双向冒泡排序最终优化:优化一 + 优化二 + 双向冒泡写在最后参考普通的冒泡排序 public void bubbleSort(int[] a) { for (int i = 0; i < a.length - 1; i++) { // 外层控制循环次数 for (in...原创 2019-11-17 21:38:27 · 6631 阅读 · 2 评论 -
并查集的实现及应用(使用 Java 语言)
文章目录简介用数据结构来实现并查操作初始化查找合并优化按秩合并路径压缩应用LeetCode 第 547 题:朋友圈题目描述示例注意代码实现参考简介并查集(Union-Find)是一种树形的数据结构,用于处理一些不相交集合的合并及查询问题。从它的名字“并查”可以知道它包含了两个操作:合并和查找。合并:将两个不相交集合合并成同一个集合。查找:确定元素属于哪一个集合。一般来说,一个集合用一个元素...原创 2019-11-10 09:22:56 · 455 阅读 · 0 评论 -
马拉车(Manacher)算法的说明和实现(使用 Java 语言)
简介了解马拉车算法的作用前,先要知道回文字符串的概念。回文字符串是指无论正着读还是反着读,结果都是一样的字符串。例如 aba、abba 都是回文字符串。马拉车算法就是用来求一个字符串中的最长回文子串。例如 LeetCode 的第五题“最长回文子串”。算法思路马拉车算法的思想和中心扩展算法类似,也是求每个中心点向外扩展得到的最长回文子串长度,所有中心点中最长的回文子串就是要求的结果。但是中...原创 2019-11-06 17:07:07 · 845 阅读 · 0 评论 -
利用KMP算法解决LeetCode第28题:实现strStr()
文章目录简介算法分析和暴力法的区别重点和难点分析next数组如何求实战:实现strStr()(LeetCode第28题)题目描述示例代码参考简介KMP算法是一种字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹...原创 2019-05-06 14:31:26 · 540 阅读 · 4 评论 -
LeetCode第56题:合并区间(Java实现)
文章目录题目示例解题思路代码实现题目给出一个区间的集合,请合并所有重叠的区间。示例示例1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 ...原创 2019-05-27 14:38:50 · 2102 阅读 · 0 评论