文章分类 -  算法

摘要:Python|算法|快速排序|如何在O(n)查找第K大元素 王争老师讲过,学习算法不是死记硬背一些源代码或概念,而是学习算法的实现思路、思维、应用场景,从而达到灵活运用。 比如现在要时间复杂度为 O(n),在一个长度为 n 的数组中查找到第 K 大的元素,你会怎么做呢? 你可能会说这很简单啊,第一次 阅读全文
posted @ 2020-06-20 11:54 别再闹了 阅读(1292) 评论(0) 推荐(0)
摘要:数据结构和算法面试题系列总结 作为一个多年的老菜鸟,有感于大部分的公司面试 “面试造航母,工作螺丝钉” 的作风,特整理了这个数据结构和算法面试题系列。对于校招而言,如果没有太多实践 / 实习经验,大公司往往喜欢考察数据结构和算法,如微软就特别喜欢在校招时手写算法题,而且难度还不小,当年我毕业找工作时 阅读全文
posted @ 2020-06-20 10:04 别再闹了 阅读(1633) 评论(0) 推荐(0)
摘要:二叉树的遍历——递归和非递归 看这篇文章,写的很好:https://www.cnblogs.com/heyonggang/p/3399464.html 阅读全文
posted @ 2020-06-06 11:18 别再闹了 阅读(46) 评论(0) 推荐(0)
摘要:为什么 Mysql 用 B + 树做索引而不用 B 树或红黑树 B + 树只有叶节点存放数据,其余节点用来索引,而 B 树是每个索引节点都会有 Data 域。 所以从 Mysql(Inoodb)的角度来看,B + 树是用来充当索引的,一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级 阅读全文
posted @ 2020-03-25 23:49 别再闹了 阅读(3795) 评论(0) 推荐(2)
摘要:图之 DFS 与 BFS 的复杂度分析 BFS 的复杂度分析。 BFS 是一种借用队列来存储的过程,分层查找,优先考虑距离出发点近的点。无论是在邻接表还是邻接矩阵中存储,都需要借助一个辅助队列,v 个顶点均需入队,最坏的情况下,空间复杂度为 O(v)。 邻接表形式存储时,每个顶点均需搜索一次,时间复 阅读全文
posted @ 2020-03-25 20:40 别再闹了 阅读(1268) 评论(0) 推荐(0)
摘要:Prim 算法 普里姆算法介绍 普里姆 (Prim) 算法,是用来求加权连通图的最小生成树的算法。 基本思想 对于图 G 而言,V 是所有顶点的集合;现在,设置两个新的集合 U 和 T,其中 U 用于存放 G 的最小生成树中的顶点,T 存放 G 的最小生成树中的边。 从所有 uЄU,vЄ(V U) 阅读全文
posted @ 2020-03-25 15:12 别再闹了 阅读(452) 评论(0) 推荐(0)
摘要:图解排序算法之希尔排序 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破 O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。 阅读全文
posted @ 2020-03-23 11:54 别再闹了 阅读(445) 评论(0) 推荐(0)
摘要:二叉树非递归遍历 1. 先序:用栈,入栈时候访问,一直存入左子节点,退栈的时候再存入右子节点:http://data.biancheng.net/view/143.html 2. 中序:用栈,退栈的时候访问:https://blog.csdn.net/Billy1900/article/detail 阅读全文
posted @ 2020-03-23 10:37 别再闹了 阅读(54) 评论(0) 推荐(0)
摘要:Java 常用的九种排序算法与代码实现 排序问题一直是程序员工作与面试的重点,今天特意整理研究下与大家共勉!这里列出 8 种常见的经典排序,基本涵盖了所有的排序算法。 1. 直接插入排序 我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列 阅读全文
posted @ 2020-03-23 00:28 别再闹了 阅读(462) 评论(0) 推荐(0)
摘要:给定二叉树的前序和后序,判断二叉树是否唯一 对于一棵二叉树,如果给定中序和前序后序任意一个,是可以确定这个树的形状的。例如给定前序和中序: 前序第一个结点肯定是根节点,后面是: \1. 左子树、右子树 \2. 只有左子树 \3. 只有右子树 对于前序中的根节点,在中序找找到位置后,他的左边有元素就有 阅读全文
posted @ 2020-03-22 17:34 别再闹了 阅读(1217) 评论(0) 推荐(0)
摘要:拦截导弹 题目描述 某国进行军事演戏,研发一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于等于前一发的高度。某天,雷达捕捉到敌国导弹来袭。由于该系统还在试用阶段,所以只用一套系统,因此有可能不能拦截所有的导弹。请你帮忙选择一套系统, 阅读全文
posted @ 2020-03-22 11:27 别再闹了 阅读(203) 评论(0) 推荐(0)
摘要:最大公因数和最小公倍数算法 这里只介绍最大公因数算法,因为 最小公倍数其实就是两数相乘再除以最大公因数 我们经常会遇到有关数论的题目,求解最大公因数便是常见的题目之一,以下为几种常见的方法,他们的主要结构均为递归 (1) 辗转相除法 (个人比较喜欢这个算法,比较简洁) 这便是著名的欧几里得算法 Eu 阅读全文
posted @ 2020-03-22 10:02 别再闹了 阅读(2990) 评论(0) 推荐(0)
摘要:Dijkstra 算法的Java实现 迪杰斯特拉算法介绍 迪杰斯特拉 (Dijkstra) 算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展 (广度优先搜索思想),直到扩展到终点为止。 基本思想 通过 Dijkstra 计算图 G 中的最短路径 阅读全文
posted @ 2020-03-21 01:04 别再闹了 阅读(412) 评论(0) 推荐(0)
摘要:图论:有向无环图的排序——拓扑排序 一、什么是拓扑排序 在图论中, 拓扑排序(Topological Sorting) 是一个 有向无环图(DAG, Directed Acyclic Graph) 的所有顶点的线性序列。且该序列必须满足下面两个条件: 1. 每个顶点出现且只出现一次。 2. 若存在一 阅读全文
posted @ 2020-03-21 00:37 别再闹了 阅读(10304) 评论(0) 推荐(1)
摘要:BFS和DFS的Java实现 BFS 本文将着重介绍遍历图的两种最常用的方法,分别为广度优先遍历和深度优先遍历,后面会具体介绍为什么这么命名。首先来看广度优先遍历 BFS(Breadth First Search),其主要思想是从起始点开始,将其邻近的所有顶点都加到一个队列(FIFO)中去,然后标记 阅读全文
posted @ 2020-03-20 23:58 别再闹了 阅读(464) 评论(0) 推荐(0)
摘要:图论 多源最短路路径算法:弗洛伊德算法 多源最短路指的是执行一次该算法之后,我们能得到任意点之间的最短路径,而不是像dijkstra算法那样只能得到两个点之间的。虽然我们可以直接对每个顶点通过迪杰斯特拉算法求得所有的顶点到所有顶点的时间复杂度,时间复杂度为O(n 3),但是弗洛伊德算法更加简洁优雅 阅读全文
posted @ 2020-03-20 22:20 别再闹了 阅读(3116) 评论(0) 推荐(0)
摘要:二叉平衡树(AVL tree)的java实现 阅读全文
posted @ 2020-03-02 23:58 别再闹了 阅读(264) 评论(0) 推荐(0)