数据结构
文章平均质量分 54
xy913741894
这个作者很懒,什么都没留下…
展开
-
二叉树的线索化(C++实现)
关于四种遍历方式的递归和非递归实现可点击 我的github 里面的BInaryTree.h查看。我们希望很快找到某的结点的前序或者后继,又不想遍历一遍,这就需要我们记录下每个结点的前驱和后继,因此为了做到这一点,我们引入了二叉树的线索化。原创 2017-02-05 22:54:24 · 1286 阅读 · 0 评论 -
单链表含环的各种面试题
判断链表是否带环?若带环求环的长度?若带环求环的入口点?用快慢指针求是否带环?快慢指针相遇则带环设相遇点为meet,求环长度,只需要设置p指针指向meet,设置count,循环的时候++count,直到p指向meet得出环长度如下图:原创 2017-07-17 20:56:10 · 374 阅读 · 0 评论 -
实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
实现1+2+3…+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字class Test{public: Test() { x++; sum += x; } static int GetSum() { return sum; }private: static int x; st原创 2017-07-16 14:50:26 · 634 阅读 · 0 评论 -
理解快速排序
作为排序算法中效率最高的快速排序有着O(N*logN)的时间复杂度,同时它其中涉及的思想:分治也是十分的有用,因此无论是各种考试还是IT公司的面试一般都少不了它。更重要的是,快速排序被称为20世纪十大算法之一,所以我们有什么理由不好好去学习理解快排呢?目录这篇博客将会根据我自己的理解,尽量写完整有关快排常见的要点(包括原创 2017-03-02 12:08:54 · 1401 阅读 · 0 评论 -
树中两结点的最低公共祖先(C++实现)
题目是,输入两个树结点,求它们的最低公共祖先首先,要说明的是,这是一组题目,根据剑指Offer上所讲的,这道题可能会分好几种情况,因此,如果在面试时候遇到,我们需要和面试官沟通,而不是一上来就写代码。1. 如果给定树是二叉搜索树二叉搜索树(又叫二叉排序树),中序遍历是可以得到有序序列的,因此,我们可以利用这个性质来解题。假设给定的两个树结点为4,1,根据图示,显然3为最低公共祖先; 假设给定的两原创 2017-04-23 22:58:50 · 1809 阅读 · 1 评论 -
LCS,最长公共子序列
一个字符串S,去掉零个或者多个元素所剩下的子串称为S的子序列。最长公共子序列就是寻找两个给定序列的子序列,该子序列在两个序列中以相同的顺序出现,但是不必要是连续的。例如序列X=ABCBDAB,Y=BDCABA。序列BCA是X和Y的一个公共子序列,但是不是X和Y的最长公共子序列,子序列BCBA是X和Y的一个LCS,序列BDAB也是。暴力解法寻找LCS的一种方法是枚举X所有的子序列,然后注意检查是否是Y原创 2017-05-11 18:32:25 · 347 阅读 · 0 评论 -
动态规划 钢条切割
这是算法导论动态规划的一个例子,自己实现了一下~给定一个长度为n英寸的钢条和一个价格表Pi(i=1,2…n),求切割钢条方案,使得销售收益Rn最大。注意,如果长度为n的钢条价格Pn足够大,则最优解可能就不需要切割。分析:代码如下:#include<iostream>#include<vector>#include<algorithm>using namespace std;//recursio原创 2017-05-11 17:02:39 · 398 阅读 · 0 评论 -
最小生成树(prim和krustal)
mark一下我觉得不错的博客,尤其是图片那块,留下来以后复习用,嘿嘿最小生成树(prim和krustal)代码我按照自己的思路写的,可以见我的github转载 2017-03-19 22:24:52 · 1114 阅读 · 0 评论 -
布隆过滤器(BloomFilter)的实现
布隆过滤器 – 空间效率很高的数据结构上面这个链接对布隆过滤器进行了比较详细的介绍,可以仔细看一看。在这里,我自己主要写一写自己的理解,并用代码实现一个简单的版本。BloomFilter往往用于数据量太大内存一下子存不了的情况,其实本质有点类似bit-map 的扩展,它的原理: 当一个元素被加入集合时,通过 K 个 Hash 函数将这个元素映射成一个位阵列(Bit array)中的 K 个点,把原创 2017-02-22 21:40:14 · 1039 阅读 · 0 评论 -
海量数据处理
最近看到一些海量处理的博客,大赞!!!地址复制在此方便自己查找。教你如何迅速秒杀掉:99%的海量数据处理面试题http://blog.csdn.net/v_july_v/article/details/7382693海量数据处理:十道面试题与十个海量数据处理方法总结http://blog.csdn.net/v_JULY_v/article/details/6279498十七道海量数据处理面试题与Bi转载 2017-02-21 20:50:48 · 358 阅读 · 0 评论 -
BitMap的C++实现
BitMap算法的实现 所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。我们知道,一般可以直接操控的最小的单位是字节,比如在C/C++中,定义一个类型char,对它进行各种操作。然后很多时候,面对一个很大数据量,且我们仅仅希望知道某个数是否存在,我们不妨可以(有时候是必须)使用Bit原创 2017-02-21 20:38:28 · 6707 阅读 · 1 评论 -
map和set的使用和原理
我们学习过顺序容器如vecor,list等,它们中的元素是按照在容器中的位置来顺序保存和访问的。而接下来要学习的关联容器则有根本的不同,它们中的元素是按关键字来保存和访问的。 在《C++Primer》中列举了标准库中的8个关联容器,如下:关联容器支持高效的关键字查找和访问,我们在这里介绍两个主要的关联容器set和map。mapmap里面存的是一些key-value对,其中key起到索引的作用, 而原创 2017-02-16 13:21:46 · 7411 阅读 · 1 评论 -
hash原理
通过hash函数将数据映射为索引(下标),便于查找,在hash冲突做得好且数据较少的情况下可达到O(1)。 常用的hash函数有除留余数法,线性探测,二次探测,开链法,在大部分情况下基本就是用开链法:hash的负载因子:元素个数/hash表长度 一般控制在0.7 -0. 8如何提高hash查找的效率设置好的hash函数,冲突尽量少空间换时间,增大表长STL使用素数表hash桶挂原创 2017-07-18 22:34:08 · 460 阅读 · 0 评论