逻辑题三

一.

15个瓶子,其中最多有一瓶有毒,现在有四只老鼠,喝了有毒的水之后,第二天就会死。如何在第二天就可以判断出哪个瓶子有毒。

解答:

四只老鼠,用二进制可以给瓶子编码0001 - 1111

具体操作:


image.png

这里我们将水瓶依次编号为1 - 15, 老鼠依次编号为1 - 4;每只老鼠分别喝下对应二进制位为1的水,最后根据老鼠的死亡情况,可以定位到哪一瓶水有毒。

比如说老鼠3老鼠4都死了,就证明是第3瓶水有毒。

二.

六个海盗抢到共计100个宝石,现在由第一个海盗开始轮流提出分赃计划,只要同意计划的人不超过一半,提出计划的海盗会被处死,然后下个人继续提出计划。如果海盗无法获得认可的最大利益,那么一定会投反对。请问第一个海盗如何提出分赃计划,保证自己的利益最大化并且不死?

解:逆向推导题目:以最小的支出争取可以争取的人。

2人:                   【0 - 100】
3人:                【99 - 1 - 0】
4人:          【97 - 0 - 2 - 1】
5人:     【97 - 0 - 1 - 0 - 2】
6人:【96 - 0 - 1 - 2 - 1 - 0】
  • 当只剩下2个海盗,海盗1海盗2,由海盗1来提出分赃计划,海盗1只能是自己得0个金币海盗2分得100金币,这样才能保证自己不会被处死。

  • 当只剩下3个海盗,海盗1海盗2海盗3,由海盗1来提出分赃计划,海盗1给出的分赃计划是海盗199金币,海盗21金币海盗30金币,这个计划海盗1海盗2肯定同意,超过一半,海盗2之所以会同意是因为当只剩下海盗2海盗3的时候,海盗2来提出分赃计划,海盗2一个金币都没有,所以海盗2会同意这个计划。

  • 当只剩下4个海盗,海盗1、海盗2、海盗3、海盗4,由海盗1来提出分赃计划,海盗1提出的分赃计划是海盗197金币,海盗20金币,海盗32金币,海盗41金币,之所以这么分配是依据只有3个海盗的情况来判断,对于海盗2来说,如果只有3个海盗,他可以分得99个金币,所以干脆给他0个金币海盗3,如果只有3个海盗可以分得1个金币,所以给他2个金币海盗2肯定同意,海盗4,如果只有3个海盗可以分得0个金币,所以给他1个金币,他也会同意。这样就会超过一半的人同意这个方案。

  • 当只剩下5个海盗,海盗1提出的分赃计划是海盗197个金币,海盗20个金币,海盗31个金币海盗40个金币海盗52个金币,这样就能保证超过一半的人同意这个计划。

  • 当只剩下6个海盗时,海盗1提出的分赃计划是海盗196个金币,海盗20个金币,海盗31个金币海盗42个金币海盗51个金币,这样就能保证超过一半的人同意这个计划。

三.

100个人抢红包,每6个人可以成组领取共计3元红包,每个人限领3次,请问100个人最多可以领取多少钱?

解:
首先100个人中找出4个人,称作A4,其余96人组成16组领取红包。接着从96个人中找出4个,称作B4A4和另外92个人组成16组领取红包。再从剩下92个人里面找出4人称作C4A4+B4+88人组成16组领取。最后剩下领取了两次的A4、B4、C4一起组成两组,领取红包,每个人都领取三次,共计领取150

四.

假设有10GB的订单数据,我们希望按照订单金额(假设金额都是正整数)进行排序,但是内存有限只有100M,没办法一次性将10GB的数据都加载到内存中,请问要怎么进行排序。

解:

  • 先将10GB的数据,分成100份,每份100M,然后分段加载进内存,遍历统计订单金额所在范围,假设统计范围为0 - 10万之间,我们将所有的订单依据订单金额划分为100个桶,第一个桶的金额为0 - 1000元, 第二个桶是1001 - 2000元,以此类推,每个桶对应一个存储文件,并且按照金额范围大小顺序编号命名(00, 01, 02, ... 99);

  • 然后再次分段遍历10GB的订单数据,将依据订单金额,将订单放入对应的桶中,然后存储到相应的磁盘上,如果订单金额分布比较均匀,那每个桶最终的订单大小差不多是100M左右,但也可能出现相差较大的现象,那就将桶中订单数据大小超过100M的继续在该桶金额范围内继续划分,直到每个桶的订单数据大小,小于100M

  • 然后依次加载每个桶的订单数据,依据订单金额,对数据从小到大进行排序。

五.

在一个文件中有 10G个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。

解:
思路: 一个整数占4个字节,每个字节是8位,将整形的每1位作为一个关键字,如果最高位值越大,整数越大,如果最高位相同再比较次高位。整个比较过程类似于字符串的字典排序。

  • 10G整数分成5次,每次2G读入内存,然后遍历读入内存的数据,对每个数据利用位运算取出最高的8位(24 - 31),这8bit最多可以表示255个桶,因此依据最高8bit的值,将整数放入对应的桶中。最后把每个桶写入磁盘中,同时在统计每个桶中的整数数量,并存储。

  • 依据内存中统计的每个桶的整数数量,计算中位数在哪个桶中,然后对这个桶进行排序,取出中位数的值。

  • 如果中位数所处的桶的大小超过2G,那么就对这个桶里面的数据依据次高8位继续进行划分(16- 23),并统计各个桶中的数量,然后依据之前算成来的桶的数量进行计算,算成中位数处于哪个桶,并对该桶进行排序,取出中位数。

六.

假设我们有 10 万条 URL 访问日志,如何按照访问次数给 URL 排序?

解:

  • 遍历10万条数据,以URL作为Key,访问次数作为Value,存入散列表,同时记录下访问次数的最大值k,时间复杂度O(N);

  • 如果K不是很大,可以使用桶排序,时间复杂度是O(N),如果K非常大,就使用快速排序,时间复杂度为O(nlogn);

七.

有两个字符串数组,每个数组大约有10万条字符串,如何快速找出两个数组中相同的字符串。

  • 以第一个字符串数组构建HashSetkey为字符串,再遍历第二个字符串数组,以字符串为keyHashSet查找,如果包含就说明存在与该字符相同的字符串,添加到相同列表里面。

八.

假设猎聘网有 10 万名猎头,每个猎头都可以通过做任务(比如发布职位)来积累积分,然后通过积分来下载简历。假设你是猎聘网的一名工程师,如何在内存中存储这10万个猎头ID和积分信息,让它支持如下操作:

  • 根据猎头的ID快速查找、删除、更新这个猎头的积分信息。

  • 查找积分在某个区间的猎头ID列表;

  • 查找按照积分从小到大排名在第x位第y位之间的猎头ID列表。

解:

  • 猎头ID构建一个散列表,以积分排序构建一个跳表

  • ID在散列表中所以可以O(1)查找到这个猎头

  • 积分跳表存储,跳表支持区间查询

九.

区块链使用的是哪种哈希算法吗?是为了解决什么问题而使用的呢?

解:

  • 区块链是一块块区块组成的,每个区块分为两部分:区块头区块体

  • 区块头保存着自己的区块体和上一个区块头哈希值

  • 因为这种链式关系和哈希值的唯一性,只要区块链上任意一个区块被修改过,后面所有区块保存的哈希值就不对了。

  • 区块链使用的是SHA256哈希算法,计算哈希值非常耗时,如果要篡改一个区块,就必须重新计算后面所有区块的哈希值,短时间几乎不可能做到。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341