随笔分类 - 数据算法
寻找面积最大的凸多边形
摘要:问题:给出一系列的坐标点,请找出哪些点可以围成一个面积最大的凸多边形? 思路:(1)先寻找最左边的坐标点,这样剩下的点与这个点都可以连成一条直线,寻找斜率最大的点(x0,y0),这个点就是需要找的。 (2)以这个点(x0,y0)为基础,按照上述方法寻找下一个点,以此类推,直到形成一个...
阅读全文
高度最小的BST
摘要:题目:对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。给定一个有序序列int[]vals,请返回创建的二叉查找树的高度。 由于没有让给出树的构造过程,所以可以直接通过归纳的方式计算得出结果。但是在这里我们仍旧使用递归的方式模拟树的构建,并最终得到二叉搜...
阅读全文
判断有向图中两点之间是否存在路径
摘要:对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。给定图中的两个结点的指针UndirectedGraphNode*a,UndirectedGraphNode*b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。import java....
阅读全文
堆排序建堆复杂度在特殊情况下的推导
摘要:堆排序分为两个过程,一个建堆的过程,一个是从堆顶取数的过程。这里针对第一个过程,给出在堆的形式是完全满二叉树的情况下,建堆复杂度Ο(n)的简单推导。 上图是一个完全满二叉树,假设一个完全满二叉树的节点数为n,树高为h(共h层),则满足h = log(n + 1)。由堆的构建过程可以知道,第...
阅读全文
一个用来进行算法演示的网站
摘要:太原理工大学有一门数据结构的精品课程,课程给出了栈和队列、线性表、树、图以及查找和排序的算法演示过程。 http://www.tyut.edu.cn/kecheng1/site01/suanfayanshi/default.asp图: (1)拓扑排序算法思想:选一个入度为 0 的顶点输出,并...
阅读全文
几种常见排序算法的时间复杂度和简单描述
摘要:下面总结几种常见的排序算法,包括插入排序、选择排序、快速排序、归并排序和堆排序。时间复杂度:插入排序选择排序快速排序归并排序堆排序Ο(n2)Ο(n2)Ο(nlog(n))Ο(nlog(n))Ο(nlog(n))算法概述:插入排序:每次从未排好序的数据堆中拿出一个数,插入到已排好序的数据队列的正确...
阅读全文
二叉树平衡检查
摘要:实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode*root,请返回一个bool,代表这棵树是否平衡。import java.util.*;/*public class TreeNode { int ...
阅读全文
表达式前中后缀形式的转换
摘要:通常情况下,我们看到的表达式的形式称为表达式的中缀形式:a+b*c-d+e。 为了将其转化为前缀和后缀的形式需要先对表达式进行预处理,因为表达式中优先级的设定(乘除大于加减)虽然是我们约定好的,但是机器却不能够像人类一样加以区分,所以需要我们先告诉他们。为此我们需要加上括号,区分优先级:((a...
阅读全文
用数组实现3个栈之固定分割(Java)
摘要:摘自《程序员面试金典》我们首先最容易想到的就是固定分割的方法:将数组等分为3分,每一份均可以被看做一个栈,然后可以在每个栈上执行出入栈的操作。这种方法优点是比较直接,实现简单。当然缺点是不够灵活,有可能一个栈出现了空间溢出的情况,而其他栈还是空的状态。 下面说下实现的思路,首先对于长度为n的数...
阅读全文
浙公网安备 33010602011771号