随笔分类 - 数据结构与算法
摘要:给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。 思路分析 当我看到这道题的第一想法是用三指针的方法解决:index1指向s1,index2指向s2,index3指向s3。按照顺序判断s3的字符是否与s1、s2的字符一致,即先与s1判断,不一致再与s2判断;
阅读全文
摘要:二叉树的所有路径 给定一个二叉树,返回所有从根节点到叶子节点的路径。 算法分析: 假设起始节点为1;先搜索1节点的右子节点为2,此时将1节点置为已搜索状态;判断2节点是否为已搜索状态,若未搜索,则将2节点置为已搜索状态;每次都优先搜索判断右侧邻接节点; 如图所示,若此时已搜索至2节点,发现右子节点为
阅读全文
摘要:深度优先搜索算法 深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点,可以这样理解:每次都在访问完当前结点后首先访问当前结点的第一个邻接结点。 我们可以看到,这样的访问策略是
阅读全文
摘要:六、图 1. 图基本介绍 当我们需要表示多对多的关系时,这里我们就用到了图。 1.1 图的举例说明 图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点也可以称为顶点。 1.2 图的常用概念 1)顶点(vertex) 2)边(edge) 3)路径 4)无向图 5)有向
阅读全文
摘要:7. 快速排序 7.1 快速排序思路 快速排序的基本思想是任取待排序序列的一个元素作为中心元素(可以用第一个,最后一个,也可以是中间任何一个),习惯将其称为pivot,枢轴元素; 将所有比枢轴元素小的放在其左边; 将所有比它大的放在其右边; 形成左右两个子表; 然后对左右两个子表再按照前面的算法进行
阅读全文
摘要:冒泡排序 4.1 基本介绍 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换
阅读全文
摘要:排序算法 1. 排序算法的介绍 排序也称为排序算法,排序是将一组数据,依指定的顺序进行排序的过程。 2. 分类 内部排序: 指将需要处理的所有数据都加载到内部存储器中进行排序。 外部排序: 数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。 常见的排序 3. 时间复杂度 3.1 时间复杂度
阅读全文
摘要:四、 递归 1. 概念 简单来说,递归就是方法自己调用自己,每次调用时传入不同的变量。 2. 递归的调用规则 public static void main(String args[]) { test(4); } public static void test(int n) { if(n > 2)
阅读全文
摘要:二、链表 1、介绍 链表是一个有序的列表,上一个数据连接下一个数据,通过链表指针连接,顺序不可改变。 看一下链表在内存中的存储结构: 1. 链表是以节点的形式存储在内存空间中,是链式存储; 2. 每个节点包括data域(存储数据)和next域(存储指向下一节点的地址值); 3. 虽然节点是有顺序的,
阅读全文
摘要:一、数组 1、稀疏数组与二维数组的转换 1.1、二维数组转稀疏数组 1. 遍历原始的二维数组,得到有效数据的个数num 2. 创建稀疏数组 sparseArr int[num+1][3] 3. 将二维数组的有效数据存入到稀疏数组 1.2、稀疏数组转二维数组: 1. 先读取稀疏数组的第一行,获取原始数
阅读全文