数据结构与算法
yeiweilan
欢迎指正
展开
-
二叉树系列
使用数组表示 实现堆排序 从数组索引的第一一个位置开始构建树 找到最大堆(找到子节点中值比较大的数值作为根节点。方法:如果子节点的值大于父节点的值,则交换之) 求出父节点的个数(N-1/2) 父节点的索引:父节点个数到1 子节点的索引: 左节点=父节点的索引*2 根节点与最后一个节点交换 重复第一步和第二部 代码实现/** * 二叉树 * * @a原创 2017-12-18 19:59:11 · 407 阅读 · 0 评论 -
数据结构简述
定义简单说,数据结构就是一个容器,以某种特定的布局存储数据。这个“布局”使得数据结构在某些操作上非常高效,在另一些操作上则不那么高效。你的目标就是理解数据结构,这样就能为手头的问题选择最优的数据结构。常用的数据结构数组数组是一种最简单和最广泛使用的数据结构,其它数据结构比如堆栈和队列都源自数组。基本操作:Insert——在给定索引位置插入一个元素Get——返回给定索引位置的元...原创 2019-01-29 11:44:19 · 305 阅读 · 0 评论 -
归并排序
基本思想归并排序:是利用归并的思想实现的排序方法,该算法采用经典的分治策略(分治法将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。合并相邻有序子序列再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5...原创 2019-02-21 17:23:34 · 131 阅读 · 0 评论 -
SingleNumber问题
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。要求:具有线性时间复杂度,不使用额外空间题目解析:根据题目描述,由于加上了时间复杂度必须是O(n),并且空间复杂度为O(1)的条件,因此不能用排序方法,也不能使用map数据结构。因此,答案是使用 位操作Bit Operation 来解此题。将所有元素做异或运算,即a[1]...原创 2019-02-11 10:58:50 · 240 阅读 · 0 评论 -
拓扑排序
拓扑排序是指,将一个有向无环图(Directed Acyclic Graph简称DAG)进行排序进而得到一个有序的线性序列。例如,一个项目包括A、B、C、D四个子部分来完成,并且A依赖于B和D,C依赖于D。现在要制定一个计划,写出A、B、C、D的执行顺序。这时,就可以利用到拓扑排序,它就是用来确定事物发生的顺序的。在拓扑排序中,如果存在一条从顶点A到顶点B的路径,那么在排序结果中B出现在A的后...原创 2019-02-22 14:39:26 · 3349 阅读 · 1 评论 -
找到字符串种最长的回文子串
1、先对字符串进行预处理,两个字符之间加上特殊符号#2、然后遍历整个字符串,用一个数组来记录以该字符为中心的回文长度,为了方便计算右边界,我在数组中记录长度的一半(向下取整)3、每一次遍历的时候,如果该字符在已知回文串最右边界的覆盖下,那么就计算其相对最右边界回文串中心对称的位置,得出已知回文串的长度4、判断该长度和右边界,如果达到了右边界,那么需要进行中心扩展探索。当然,如果第3步该字符没...原创 2019-09-19 19:08:20 · 290 阅读 · 0 评论 -
海盗问题
题目:有5个海盗,获得了100枚金币,于是他们要商量一个方法来分配金币。商议方式如下:1. 由5个海盗轮流提出分配方案。2. 如果超过半数海盗(包括提出者)同意该方案,则按照该方案分配。3. 如果同意该方案的人数(包括提出者)小于等于半数,则提出者要被扔到海里喂鱼,剩下的海盗继续商议分配。4. 海盗们都是绝对理性的,以自己尽可能多获得金币为目的。但是在收益相等的情况下,会倾向把提出者扔到...原创 2019-01-24 14:18:11 · 899 阅读 · 0 评论 -
贪婪算法
基本思路从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快地求得更好的解。当达到算法中的某一步不能再继续前进时,就停止算法,给出近似解。存在问题不能保证最后的解是最优解。不能用来求最大或最小解问题。只能求满足某些约束条件的可行解的范围。实例换零钱 例如根据我国现有币种,需补零钱68.90元,至少有多少种方案待续...原创 2018-04-12 16:15:26 · 278 阅读 · 0 评论 -
广度/深度优先算法
广度优先搜索(也称宽度优先搜索,缩写BFS)是连通图的一种遍历策略。一个最直观经典的例子就是走迷宫,我们从起点开始,找出到终点的最短路程,很多最短路径算法就是基于广度优先的思想成立的。待续原创 2017-12-20 18:42:34 · 363 阅读 · 0 评论 -
解决Hash冲突四种方法
一)哈希表简介非哈希表的特点:关键字在表中的位置和它之间不存在一个确定的关系,查找的过程为给定值一次和各个关键字进行比较,查找的效率取决于和给定值进行比较的次数。 哈希表的特点:关键字在表中位置和它之间存在一种确定的关系。哈希函数:一般情况下,需要在关键字与它在表中的存储位置之间建立一个函数关系,以f(key)作为关键字为key的记录在表中的位置,通常称这个函数f(key)为哈希函数。has原创 2017-06-18 11:19:48 · 43957 阅读 · 8 评论 -
八(n)皇后
这里以最常见的8皇后为例/** * TODO 八皇后 * * @author yaomingfeng * @version C10 2017年12月18日 * @since SDP V300R003C10 */public class Queen{ // 方法的总数 static int count = 1; // 棋盘,0表示没有放皇后,1表示放了皇后原创 2017-12-18 17:42:59 · 232 阅读 · 0 评论 -
贪心算法 AND 动态规划
贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心选择是采用从顶向下、以迭代的方法做出相继选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。 对于一个具体问题,要确定它是否具有贪心选择的性质,我们必须证明每一步所作的贪心选择最终能得到问题的最优解。通常可以原创 2018-01-16 09:42:57 · 2014 阅读 · 0 评论 -
Java集合:set list queue map 枚举
简述 Collection是最基本的集合接口,一个Collection代表一组Object的集合,这些Object被称作Collection的元素。Collection是一个接口,用以提供规范定义,不能被实例化使用 List是可重复集合,Set是不可重复集合,这两个接口都实现了Collection父接口. Map未继承Collection,而是独立的接口, Map是一种把键对原创 2017-06-17 16:39:15 · 857 阅读 · 0 评论 -
递归算法
递归算法,就是一种直接或者间接地调用自身的算法。递归算法的具体实现过程一般通过函数或子过程来完成,在函数或子过程的内部,编写代码直接或者间接地调用自己,即可完成递归操作。 阶乘的计算 int factorial(int n){ if(n==1) return 1; else return n*factorial(n-1) }待续。。。。...原创 2018-04-09 19:22:43 · 315 阅读 · 0 评论 -
分治算法
使用分治法设计程序时,一般可按照以下步骤进行: (1)分解:将要求解的问题划分成若干规模较小的同类问题。 (2)求解:当子问题划分的足够小时,用较简单的方法解决。 (3)合并:按求解问题的要求,将子问题的解逐层合并,即可构成最终的解。实例(比赛赛程)待续。。。。...原创 2018-04-12 15:58:14 · 289 阅读 · 0 评论 -
排序算法
简述术语说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度:一个算法执行所耗费的时间。空间复杂度:运行完一个程序所需内存的大小。稳定性稳定性的好处。排序算法如果...原创 2019-10-06 14:53:53 · 211 阅读 · 0 评论