数据结构与算法
文章平均质量分 68
本专栏内容来源于B站韩顺平老师的数据结构与算法视频课程
Fisher3652
这个作者很懒,什么都没留下…
展开
-
LeetCode142:环形链表II
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。示例 1:输入:head = [3,2,0,-4], pos = 1。原创 2023-10-12 10:20:42 · 110 阅读 · 0 评论 -
LeetCode141:环形链表
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。输入:head = [3,2,0,-4], pos = 1。给你一个链表的头节点 head ,判断链表中是否有环。输入:head = [1,2], pos = 0。解释:链表中有一个环,其尾部连接到第二个节点。解释:链表中有一个环,其尾部连接到第一个节点。输入:head = [1], pos = -1。解释:链表中没有环。原创 2023-09-08 14:24:07 · 376 阅读 · 0 评论 -
LeetCode83: 删除排序链表中的重复元素
删除排序链表中的重复元素原创 2023-08-11 15:08:56 · 182 阅读 · 0 评论 -
LeetCode21:合并两个有序链表
如果 l1 或者 l2 一开始就是空链表,只需要返回另一个链表。否则,判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归查找剩余节点里值最小的节点,并赋值给当前节点的下一个节点。如果两个链表有一个为空,返回另一个链表结束递归。原创 2023-06-30 17:46:42 · 186 阅读 · 0 评论 -
LeetCode448:找到所有数组中消失的数字
LeetCode448:找到所有数组中消失的数字。原创 2023-06-30 11:34:00 · 125 阅读 · 0 评论 -
LeetCode283:移动零
LeetCode283:移动零。原创 2023-06-29 11:17:38 · 292 阅读 · 0 评论 -
LeetCode88:合并两个有序数组
LeetCode88:合并两个有序数组。原创 2023-06-26 15:15:43 · 123 阅读 · 0 评论 -
LeetCode1:两数之和
两数之和原创 2023-06-20 16:31:18 · 91 阅读 · 0 评论 -
LeetCode70:爬楼梯
第 x 级台阶的方案数是爬到第 x−1 级台阶的方案数和爬到第 x−2 级台阶的方案数的和。因为每次只能爬 1 级或 2 级,所以 f(x) 只能从 f(x−1) 和 f(x−2) 转移过来,而这里要统计方案总数,我们就需要对这两项的贡献求和。原创 2023-06-20 16:06:05 · 72 阅读 · 0 评论 -
算法8:弗洛伊德算法
和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名;弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径;迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径;弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;原创 2022-11-10 21:27:16 · 197 阅读 · 0 评论 -
算法7:迪杰斯特拉算法
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。原创 2022-11-06 17:38:29 · 376 阅读 · 0 评论 -
算法6:克鲁斯卡尔算法
以城市公交站问题来图解说明 克鲁斯卡尔算法的原理和步骤:在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。在将 加入到最小生成树R中之后,这几条边的顶点就都有了终点原创 2022-11-06 11:08:28 · 412 阅读 · 0 评论 -
算法5:普里姆算法
普利姆(Prim)算法求最小生成树,也就是在包含n个顶点的连通图中,找出只有(n-1)条边包含所有n个顶点的连通子图,也就是所谓的极小连通子图普利姆的算法如下设G=(V,E)是连通网,T=(U,D)是最小生成树,V,U是顶点集合,E,D是边的集合若从顶点u开始构造最小生成树,则从集合V中取出顶点u放入集合U中,标记顶点v的visited[u]=1。原创 2022-10-07 17:34:59 · 2313 阅读 · 0 评论 -
算法4:贪心算法
贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。原创 2022-10-07 17:18:45 · 1263 阅读 · 0 评论 -
算法3:KMP算法
KMP是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法.原创 2022-10-07 17:10:09 · 162 阅读 · 0 评论 -
算法2:动态规划算法
动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。( 即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解 )动态规划可以通过填表的方式来逐步推进,得到最优解。原创 2022-10-05 11:13:43 · 284 阅读 · 0 评论 -
算法1:分治算法
分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题二分搜索大整数乘法棋盘覆盖合并排序快速排序线性时间选择最接近点对问题循环赛日程表汉诺塔。原创 2022-10-04 17:41:41 · 120 阅读 · 0 评论 -
数据结构:图
线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当要表示多对多的关系时, 就需要用图所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历。原创 2022-10-03 16:57:28 · 121 阅读 · 0 评论 -
数据结构:多路查找树
B树通过重新组织节点,降低树的高度,并且减少i/o读写次数来提升效率。原创 2022-09-28 20:36:58 · 129 阅读 · 0 评论 -
数据结构:平衡二叉树(AVL树)
平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树, 可以保证查询效率较高。具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。举例说明,看看下面哪些AVL树。原创 2022-09-24 18:10:45 · 376 阅读 · 0 评论 -
数据结构:二叉排序树
BST: (Binary Sort Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点。原创 2022-09-17 21:18:20 · 401 阅读 · 0 评论 -
数据结构:赫夫曼编码
赫夫曼编码是一种编码方式, 属于一种程序算法赫夫曼编码是赫夫曼树在电讯通信中的经典的应用之一赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在20%~90%之间赫夫曼码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,称之为最佳编码。原创 2022-09-11 20:13:07 · 2247 阅读 · 0 评论 -
数据结构:赫夫曼树
给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为Huffman Tree赫夫曼树是带权路径长度最短的树,权值较大的节点离根较近。原创 2022-09-03 20:22:16 · 305 阅读 · 0 评论 -
排序算法:堆排序
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆,但不要求节点的左孩子的值和右孩子的值的大小关系。每个节点的值都小于或等于其左右孩子节点的值,称为小顶堆。原创 2022-09-03 11:41:07 · 293 阅读 · 0 评论 -
数据结构:顺序存储二叉树
从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。顺序存储二叉树的特点。原创 2022-08-21 19:44:37 · 592 阅读 · 0 评论 -
数据结构:二叉树
数据结构:二叉树。原创 2022-08-21 18:28:31 · 86 阅读 · 0 评论 -
数据结构:哈希表
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。...原创 2022-08-16 23:26:24 · 414 阅读 · 0 评论 -
查找算法:顺序查找、二分查找、插入查找、斐波那契查找
黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。斐波那契数列 {1, 1, 2, 3, 5, 8, 13, 21, 34, 55 } 发现斐波那契数列的两个相邻数 的比例,无限接近 黄金分割值0.618。......原创 2022-08-14 11:23:53 · 193 阅读 · 0 评论 -
排序算法:基数排序
基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法基数排序(Radix Sort)是桶排序的扩展基数排序是1887年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较。...原创 2022-08-07 15:00:29 · 171 阅读 · 0 评论 -
排序算法:归并排序
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。...原创 2022-08-07 14:11:58 · 72 阅读 · 0 评论 -
排序算法:快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。...原创 2022-08-04 21:56:35 · 98 阅读 · 0 评论 -
排序算法:希尔排序
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。原创 2022-08-04 21:31:15 · 99 阅读 · 0 评论 -
排序算法:插入排序
插入式排序属于内部排序法,是对于待排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。原创 2022-07-31 10:59:06 · 183 阅读 · 0 评论 -
排序算法:选择排序
选择式排序属于内部排序法,是从待排序的数据中,按指定的规则选出某一元素,再交换位置后达到排序的目的。原创 2022-07-30 18:25:37 · 170 阅读 · 0 评论 -
排序算法:冒泡排序
冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。...原创 2022-07-28 20:43:06 · 100 阅读 · 0 评论 -
排序算法介绍
排序算法(Sort Algorithm),是将一组数据,依指定的顺序进行排列的过程。原创 2022-07-26 23:07:20 · 395 阅读 · 0 评论 -
递归算法:迷宫问题、八皇后问题
说明:理论上应该创建一个二维数组来表示棋盘,但是实际上可以通过算法,用一个一维数组即可解决问题. arr[8] = {0 , 4, 7, 5, 2, 6, 1, 3} //对应arr 下标 表示第几行,即第几个皇后,arr[i] = val , val 表示第i+1个皇后,放在第i+1行的第val+1列。...原创 2022-07-19 21:08:50 · 274 阅读 · 0 评论 -
数据结构:逆波兰计算器
数据结构:逆波兰计算器原创 2022-07-16 21:18:48 · 226 阅读 · 0 评论 -
数据结构:栈实现计算器(中缀表达式)
数据结构 栈实现计算器(中缀表达式)原创 2022-07-16 18:23:52 · 203 阅读 · 0 评论 -
数据结构 6:栈
数据结构 6:栈原创 2022-07-12 21:41:48 · 65 阅读 · 0 评论