
必会算法总结
不爱吃酸的酸柠檬
这个作者很懒,什么都没留下…
展开
-
必会算法总结6—二分查找算法
必会算法总结(6) - 二分查找算法 二分查找算法也是比较重要的算法,虽然简单,但是它也是笔试当中经常出现的算法。它也是典型的使用分治法实现的算法,下面我给出它的实现。算法核心这里实现的时候有一个细节,尽量不要使用mid = (i + j) / 2计算中点的值,因为很容易出数值溢出的情况,在这里我给出两种实现,代码如下:普通的二分法这种二分查找不会判断两侧端点nums[i]和nums[j]处的值,只会判断中间的值nums[mid]是否满足条件。public int binarySear原创 2021-08-05 15:02:24 · 189 阅读 · 0 评论 -
必会算法总结5—弗洛伊德算法
必会算法总结(5) - 弗洛伊德算法 弗洛伊德算法又是一个图论的算法,可能有小伙伴会问,会这么多图论的算法有用吗?可以说这对于校招进大厂的小伙伴是特别重要的,而且图相对于其它的数据结构是比较复杂的,现在的笔试动不动就是一道基于图去实现的题,可以说图论算法成了进大厂的第一步,所以我们必须特别重视图论算法的设计与实现。 回到正题,上一篇我们讲解的迪杰斯特拉算法广泛适用于单源最短路径问题,而弗洛伊德算法则更广泛的适用于多源最短路径问题,因为它用到了动态规划的思路去求解,所以避免了重复计算。各位要区分清原创 2021-07-31 20:36:21 · 487 阅读 · 0 评论 -
必会算法总结4—迪杰斯特拉算法
必会算法总结(3) - 迪杰斯特拉算法 迪杰斯特拉算法的核心在于贪心+BFS。它和上一篇介绍到的拓扑排序一样属于图论算法,是大学计算机专业必学的算法之一,也是笔试经常出的算法。那么下面让我们一起来学习迪杰斯特拉算法的实现。算法思想迪杰斯特拉算法需要维护以下两张列表:visited:记录已经计算出最短路径的节点shortest:记录到达每个节点的最短路径每次选取shortest中的权值最小的节点加入visited中,并实时维护shortest列表。图的存储实现在本次实例中我选用图的邻接原创 2021-07-29 15:53:02 · 285 阅读 · 0 评论 -
必会算法总结3—拓扑排序
必会算法总结(3) - 拓扑排序 可能很多人第一次看到拓扑排序这个名字还以为它是种数值排序算法,它其实是对有向无环图AOV的一种特殊的遍历算法。拓扑排序是图论中比较重要的算法,在笔试中也是很常见的,需要知道的是只有无环图才有拓扑排序,所以使用我们可以使用拓扑排序判断一个图中是否存在环。那么下面我们就一起学习拓扑排序。邻接表在本示例中我们选用邻接表存储图,代码如下:Nodepublic class Node { int value; List<Node> neig原创 2021-07-26 22:54:19 · 152 阅读 · 1 评论 -
必会算法总结2—最小公倍数
必会算法总结(1) - 最小公倍数 计算两个数字的最小公倍数我们需要直到数论中这样一条性质:a * b = gcd(a, b) * lcm(a, b),所以我们要计算两个数字的最小公倍数lcm只需要变换一下公式:lcm(a, b) = a * b / gcd(a, b)。所以核心还是在于计算最大公约数。算法实现两个数字:public class Main { public static int gcd(int a, int b) { if (b == 0)原创 2021-07-25 16:57:33 · 319 阅读 · 0 评论 -
必会算法总结1—最大公约数
必会算法总结(1) - 最大公约数 算法可谓是很多小伙伴心中的痛,懒得去刷题或者刷了但是收益不大。其实算法也是有自己的框架体系在支撑:像贪心,动态规划,DFS,BFS,这些技巧其实更多的是需要大量刷题去实践,去总结。有时候我们经常会遇到各种各样的笔试题,其实很大一部分在大学课堂中学过:像图论中求最小生成树的普利姆算法、克鲁斯卡尔算法;以及求单源最短路径的迪杰斯特拉算法;以及各种各样的排序算法。这些算法需要我们去理解,去记忆,因为这些已经算是必会项目了。 回到正题,这篇我们会去学习如何去求两个数的原创 2021-07-25 16:29:59 · 193 阅读 · 0 评论