数据结构
文章平均质量分 61
Bug开发攻城狮
自古,百无一用是深情,唯有套路得人心
展开
-
扔鸡蛋问题
假如有100层楼,总共有2个鸡蛋。最低需要多少次才能试探出临界点,比如,在第三层扔下去,不碎;在第四层扔下去,碎了,那第三层和第四层就是临界点。 如果之前没准备过的话,大概第一个想到的就是二分法。 二分法 首先在第50层丢第一个鸡蛋,若鸡蛋碎了,则在第一层开始往上丢鸡蛋,最坏情况是试探49+1次,为什么要从第一层开始尝试呢,因为只有2个鸡蛋;若鸡蛋没碎,则在75层...原创 2018-07-01 21:45:56 · 14805 阅读 · 8 评论 -
扔鸡蛋问题 动态规划大法
之前有一篇文章“扔鸡蛋问题”,写的是指定鸡蛋个数在指定楼层,求最优解。里面列举了二分法、平方根法和解方程法,但是,如果鸡蛋个数和楼层数是待定的,那这三种方法都搞不定了。所以,这里又得引申出新的方法“动态规划大法” 首先说一下什么是动态规划。动态规划,英文Dynamic programming,是求解决策过程最优化的数学方法。动态规划的大致思路是把一个复杂问题转化成一个分阶段逐步递推的过程...原创 2018-08-26 18:57:50 · 7859 阅读 · 1 评论 -
抢红包算法 随机法和二倍均值法
对抢红包,大家肯定不陌生,但是,有想过抢红包是如何实现的嘛?今天就来讨论下抢红包的几种实现。 首先,我们得明确一下需求和需求的限制条件。红包主要有三点限制抢到的总额 = 红包的总额,不能多也不能少了最小值是0.01元,即每个人都有份每个人抢到的红包金额,尽量平均 假设红包总金额是M元,抢红包的人数是N人随机法1.0 随机法1.0–无脑随机法,是每个人抢红包...原创 2018-09-09 19:54:18 · 30576 阅读 · 3 评论 -
什么是B-树?
什么是B-树呢?B-树全名 Balance Tree,读做B树(中间的-,只是分隔作用,不要读做B减树哦)。# B树的特征B树首先它也是属于树结构,除了树结构的节点有序、查找高效外,还有以下特性。以一个m阶的B树来举栗:根节点至少包含两个子节点;每个中间节点包括k-1个元素和k个子节点,其中m/2 <= k <= m每一个叶子节点包含k-1个元素,其中m/2 <= ...原创 2018-09-24 18:51:07 · 25496 阅读 · 3 评论 -
分配排序之"计数排序"
假设,有20个随机整数,取值范围是0到10,需要对其排序。可能第一反应是使用快速排序啊,快排的时间复杂度是O(nlog n)!但是,可不可以比O(nlog n)更快呢?这就是这篇文章要介绍的计数排序(从名字上来看,就是计算数字出现频次的排序方法,非常的见名知意)。计排的实现 因为取值范围是0到10(整数的值在0,1,2,3,4,5,6,7,8,9,10里),共有11个数值,所以需...原创 2018-10-28 22:39:51 · 12076 阅读 · 0 评论 -
分配排序之"桶排序"
上一篇说了计数排序,一种稳定的排序,时间复杂度是指数级,但是,计数排序不适用于跨度很大或者浮点数,那么有没有可以处理浮点类型的稳定排序呢?桶排序就是。桶排序的实现 首先说一下桶排序的桶是什么概念,这里的“桶”是一个区间范围,里面可以承载一个或多个元素。桶排序的第一步就是确定桶的个数和区间。具体的建立多少个桶、每个桶的区间范围是多少,有不同的方式,我们这里使用桶的数量等于原始数列的...原创 2018-11-05 00:21:53 · 13040 阅读 · 2 评论 -
分配排序之"基数排序"
上一篇说了桶排序,这次说一下桶排序的扩展-基数排序。基本概念 要说基数排序的话,那就必须得说一下两个概念。“基”和“桶” 基:基数排序里的“基”是什么意思呢?基的英文是radix,直接翻译是进制的意思,在基数排序里,指的是数字的位,比如数字123,这里1是百位的基,2是十位的基,3是个位的基 桶:桶就是上一篇桶排序中的那个桶,表示一个区间内的值。基数排序的实现...原创 2018-11-10 22:10:52 · 9926 阅读 · 0 评论 -
神奇排序--睡眠排序
最近一段时间,微信群被“老板有毛病吧,写完排序就让我走”这个段子刷屏了 这个排序,其实很早之前就看到了,还记得初见此排序,惊为天人,见惯了那些冒泡、快排,睡眠排序简直是排序界一股清流啊!当时还准备在部门技术分享的时候,分享这个,但是,单单一个睡眠排序,无法支撑一场分享,才作罢。 其实,我还是很敬佩想出睡眠排序的那位人才的,因为一般情况,想到排序,大多数人都跳不出比较排序和分配排序...原创 2018-11-17 14:10:51 · 10702 阅读 · 2 评论 -
美女和男人的游戏 博弈论
美女和男人的游戏,这是很经典的案例了,游戏规则是:男女各投一次硬币,如果男女的硬币都是正面,则男人+3;如果都是反面,则男人+1;如果一正一反,则男人-1。 男\女 正面 反面 正面 ...原创 2018-06-25 09:32:20 · 15910 阅读 · 0 评论 -
分布式全局唯一ID--SnowFlake算法
说到全局唯一ID,之前做的一个项目,有遇到类似的需求,会有多并发,但是,又需要类似于id的这么个存在。当时是直接采用的UUID(这个方案实施起来效率最高),当时为了赶进度,就匆匆忙忙的上线了。现在正好来总结一下。 一般情况,实现全局唯一ID,有三种方案,分别是通过中间件方式、UUID、雪花算法。 方案一,通过中间件方式,可以是把数据库或者redis缓存作为媒介,从中间件获取ID。...原创 2018-05-03 23:41:28 · 74071 阅读 · 0 评论 -
有1000桶酒,其中1桶有毒.而一旦吃了,毒性会在1周后发作.现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠.
选项是9只、10只、32只、999只、以上都不是.答案:10只一只老鼠喝酒后又两种状态:死(0)和活(1).所以10只老鼠就能表示1024个状态(2的10次方).1000桶酒中任何一桶酒的编号都能转化为二进制,比如:第九桶酒 9= 2^0 + 2^3假设:如果最后死掉第三、七、八只老鼠,那么就是0011000100,转换成十进制就是196,即196桶酒有毒。 如果...原创 2016-02-27 14:56:24 · 18424 阅读 · 7 评论 -
找出数组中只出现一次的数字,其它数字都出现了两次,及其扩展
题目:一个整型数组里除了一个数字之外,其它的数字都出现了两次。请写程序找出这个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:由于题目要求时间复杂度为O(n),所以先排序然后比较相邻数字是否相同的思路被排除。 空间复杂度是O(1),辅助空间被限制,所以hash表的思路也被排除。 那么这个题的突破口在哪里呢?注转载 2017-09-14 10:06:40 · 2382 阅读 · 0 评论 -
什么是闰年?闰年为什么是366天?为什么不能是100的倍数?
要说闰年,首先要介绍两个概念,一个是恒星年,一个是回归年。恒星年是地球绕太阳公转,绕一圈所消耗的时间;回归年是地球在公转的时候也会自转,自转一圈所消耗的时间,归回年是365.2422天,四年少一天(我们日常所说的一年都是说的回归年) 再来说说闰年的满足条件:满足下面2个条件之中任何之一即可。 条件1:是四的倍数,且不是100的倍数 条件2:是四百的倍数为什么会有闰年? ...原创 2018-03-13 22:28:09 · 6717 阅读 · 0 评论 -
真随机数和伪随机数
随机数的特性 随机数最初是应用在密码学的,后来也逐渐大量使用于编程语言领域。关于随机数,它有三个特性:随机性:完全乱序; 不可推测性:从已有的数,无法推测出下一个数; 不可重复性:随机数之间不重复。真随机数和伪随机数真随机数 真随机数是伴随着物理实验的,比如:抛硬币、掷骰子、电子元件的噪音、核裂变等,它的结果符合三大特性的。 具体实现:intel通过电阻和振荡器生成...原创 2019-03-15 17:34:37 · 7881 阅读 · 0 评论