数据结构与算法
文章平均质量分 59
算法学习和面试刷题
bigShong
原字节跳动,智能手机大厂JAVA,go服务端研发,丰富的高并发系统架构经验,开源社区积极参与者。
展开
-
leetcode212--网格搜索单词
字典树回溯剪枝class Solution { int[] dx = {0, 0, -1, 1}; int[] dy = {-1, 1, 0, 0}; boolean[][] visited = null; List<String > result = new ArrayList<>(); public List<String> findWords(char[][] board, String[] words) { .原创 2021-03-28 23:01:34 · 168 阅读 · 0 评论 -
并查集--leetcode200. 岛屿数量
什么是并查集有多个集合,集合内有多个元素 并查集算法用来查找一个元素所属的集合,合并两个元素各自所属的集合。称为并查集算法举例亲戚关系的等价问题,犯罪团伙的头目。 给出很多人的亲戚相互间关系,查找任意两人是否为亲戚。 多个犯罪分子各自在自己的团伙中,找到犯罪团伙的数量。算法思路使用树的数据结构来实现并查集算法。关键点: 1. 初始化集合,刚开始每个元素为一个集合,该元素就代表了该集合;如果有原创 2017-05-20 22:20:45 · 832 阅读 · 0 评论 -
负权边的最短路径--Bellman-Ford算法及其优化
算法思想核心思想:要求源点到其余顶点的最短路径,根据宽度优先搜索的经验一层一层扩展,这样来考虑,从源点开始经过其相邻的一条边(所有边走一遍)可以得到一个暂时的到各个顶点的最短路径,保存到distance数组中;然后考虑经过在之前的走过边基础上,再走一条边得到可以得到到各顶点的最短路径,就相当于经过两条边得到的最短路径,这里走第二条边时需要将每条边都走一遍才能确定下来走两条边得到的最短路径;最多可以走原创 2017-05-20 10:04:58 · 1664 阅读 · 0 评论 -
算法:理解多源最短路径--floyd算法
算法作用floyd用于求单向图的任意两点之间的最短距离,即通过floyd算法计算之后,图的邻接矩阵中每个(I,j)点的权值是最小的。算法思路以下面的双向图为例,求每对顶点之间的最短路径。 得到其邻接矩阵,在不经过中间点时,顶点只能到达其邻接点,所以这个矩阵就是其每对顶点的最短路径。根据经验知道,两点之间的距离经过第三个点可能是会变短的,并且经过的中间点不同可能得到距离更短的点,因此,floyd原创 2017-05-17 22:52:53 · 1674 阅读 · 0 评论 -
算法:理解单源最短路径——Dijkstra
单源最短路径指一个顶点到其余各个顶点的最短距离,算法思路分析下面以下图为例分析,算法的步骤。 根据上面的单向图,将其转化为邻接矩阵如下所示 dijkstra算法基于贪心思想,要求单源点的最短路径,从未走过的边中取一条最短的。 将设要求源点1 到其他顶点的最短路径,用一个数组dis[6]来保存到各个顶点的距离,初始化为dis[6]={0,1,12,1000,1000,1000}//1000表原创 2017-05-18 22:13:29 · 755 阅读 · 0 评论 -
图遍历--深度优先和广度优先
图的存储方式有两种:邻接矩阵和邻接表,这两种方式都可以用深度优先和广度优先的方式进行遍历。以下面的图为例说明遍历,其临街矩阵如作图所示。注意后面的代码中,顶点从0开始。 1. 深度优先深度优先基于递归的思想,假设开始从顶点1开始遍历,找到其第一个相邻的顶点2,一直往“深”处遍历,找顶点2的相邻顶点4,再找顶点4的相邻点,直到没有相邻点或者相邻点都被访问过进行回溯,同理对其他顶点进行遍历,直到所有顶原创 2017-05-17 21:11:09 · 746 阅读 · 0 评论 -
深度优先搜索DFS 走迷宫
要求: 1. 障碍物坐标处值为1,可走的为0. 2. 迷宫长宽小于50 3. 找到最短路径 4. 输出路径深度优先的关键点 1. 函数的形式参数 2. 递归结束条件 3. 下一步的坐标计算 4. 判断是否下一步可走 5. 已走过的路做标记 6. 回溯时将当前步标记清除分析: 1. 二维数组表示迷宫,参数需要当前坐标x,y,以及当前是第几步。 2. 结束条件为,找到目标。原创 2017-05-14 13:53:06 · 1591 阅读 · 0 评论 -
使用递归求全排列
全排列:如123三个数字的全排列:123,132,213,231,312,321;可以使用穷举的方式使用三个for循环来解决。但是如果数字很多或者数字的个数不确定那肯定不能用这种方法。以一个案例来说明。 假设手上有三封信123,三个信箱123,将三封信投递到三个信箱中正是一个全排列问题。信箱1 信箱2 信箱3 (信箱4)信1 信2 信3 假设是以上投法,当信全部投完,需要从信箱原创 2017-05-14 00:06:58 · 1218 阅读 · 0 评论 -
十大排序算法总结
排序算法包括:内排序和外排序内排序包括:插入排序,选择排序,交换排序,归并排序,分配排序以下排序均指从小到大排序。均通过测试交换排序冒泡排序思想:从左到右扫描,如果左边大于右边则交换,一次排序之后,最大数就排在了最后面,经过n-1次排序就排好了。时间复杂度:O(n2)/** * 交换数组的两个位置值 ps : 快速排序不能使用想减的方式交换 * * @param ar原创 2016-09-02 15:41:57 · 790 阅读 · 0 评论 -
字符串匹配--KMP算法
字符串匹配指在主串字符串s,中找到模式串t。字符串匹配指在主串字符串s,中找到模式串t。BF算法BF算法是朴素的字符匹配算法,思想是:如果模式串t和主串s,在对应位置匹配那么下标同时增加1,否则模式串从头开始,回到上次匹配中主串开始位置的下一位置继续往后比较,直到主串末尾。可以看到其时间复杂度为O(m*n)。KMP算法kmp在bf算法上进行了改进,主要是在模式串每次都要从头开始与主串匹配这一过程进行原创 2016-08-12 23:13:08 · 316 阅读 · 0 评论 -
数据结构总结-- 树和二叉树
树的性质1.树的结点数 = 结点度数和 + 1;(n0 + n1 + nm ….+1) 2.度为m的数第i层最多m^(i-1)次方个结点 3.高度为h的m次树,最多(m^h)/(m-1) 4.n个结点的m次树,最小高度logm(n(m-1)+1)二叉树的定义结点定义,根节点,左孩子,右孩子 java代码:/** * 结点类 * * @author Admini原创 2016-09-03 20:25:18 · 694 阅读 · 2 评论 -
查找算法总结:顺序查找,二分查找,分块查找,散列查找,二叉排序树查找
查找算法包括:顺序查找,二分查找,分块查找,散列查找,二叉排序树查找,B树 B树用于查找磁盘数据,这里不进行分析顺序查找思想:从头到尾一个一个比较,简单,时间复杂度O(n)java实现:public static int seqSearch(List<Integer> arr, int key) { for (int i = 0; i < arr.size(); i++) {原创 2016-08-29 20:56:32 · 6661 阅读 · 0 评论