有1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠。
选项是9只、10只、32只、999只、以上都不是。
解答:是8,8位正整数取值范围是0-1024,把8只老鼠编号,然后将桶编号1-1000,按二进制,对应位为1的喂食。最后用死掉的位表示1,得到一个10进制数,就是桶号了。
有25匹马,只有五个赛道,问要经过多少次的比赛,才能从这25匹马当中选出first fastest,second and third.选项是8,9,10,11,以上都不是。
分析:头5次必须跑,前1,2,3不都在冠军中,所以每组的1,2,3都要留下,然后让每组的1,2,3对练,跑3次,1组那个第一就是第一了,第二应该在1组的2,3 二组的1,2中产生,第三要加上一个三组的1。这样就使五个了。再跑一次。取前2名。5+3+1=9
改进:考虑到前面已经有5次排名的成绩,所以冠军马产生后,该组2,3名有权竞争,冠军原来的组的2,3,第二名原来组的,1,2。第三名原来组的1。这五个比一次就行了。改进后答案是5+1+1=7
给10亿个int32整数排序的问题
太多,考虑采用常数复杂度的排序算法,如桶、计数、基数等排序。
采用计数排序需要的空间是一个全int亿长度int32数组(4字节一个)。存储用:4×2147483647/1000000000=8GB.
如果只是判断有没有重复,可以用将int换成位来操作。
2 7 28 63
3次方+-1的。下一个是126


