-
一个文件里有1千万(10000000)个7位的整数(小于1千万),给大约1M内存让排序
-
位图(bitmap),长度10000000的bit数组a初始化为0,当数字x出现,a[x]=1,然后依次输出标志位为1的下标号。10000000bit == 1250000byte == 1220K == 1.19M。
-
如果严格1M做成双通道程序,第一次标记前500万输出,第二次标记后500万输出。
-
-
向量旋转:abcdefgh(长度n为8),向左旋转i=3次
-
3次反转法
i = i % n #n次还原 reverse(0, i-1) #cbadefgh reverse(i, n-1) #cbahgfed reverse(0, n-1) #defghabc
-
如果向右旋转:先取模,ii=i%n,向右旋转ii次,等于向左旋转n-ii次
-
-
某文件包含40亿个随机次序32位整数,其中有一个整数未出现,找出来。限制:内存几百字节,若干顺序文件。
- 先把最高位为1的写入文件a,最高位为0写入文件b,并分别计数countA,countB.如果最高位为1的整数全部出现,那么countA>countB && countA==2^31,则去文件b中查找,缺失的必定是最高位为0的。同理,区分第二最高位,第三最高位,直到找到
-
一个词典有230000个单词,file和life是变位词,找出所有变位词的词集
- 依次对每个单词进行签名,确保变位词拥有唯一的相同的签名,比如将单词字母排成升序,变位词排序后结果一致。然后按照签名排序,依次输出各个签名的变位词集
-
咖啡罐问题:一个成有一些黑色豆子和一些白色豆子的咖啡罐以及一大堆“额外”的黑色豆子,从罐子中随即选取两颗豆子,如果颜色相同,就将他们扔掉并却放入一个黑色的豆子;如果颜色不通,就将白色豆子放回罐子中,而将黑色的豆子扔掉。重复上述过程,直到罐子中只剩一颗豆子为止。证明该过程会终止,最后留下的豆子颜色跟初始状态时白豆和黑豆的数量有何关系?
- 证明如下:设B个黑豆,W个白豆,总数S=B+W,取2个豆子
if bb:#两黑豆 B=B-1; W=W; S=B-1+W elif ww: #两白色 B=B+1; W=W-2; S=B+1+W-2 else: #bw异色 B=B-1; W=W;; S=B-1+w
每次豆子总数都会减少1,所以过程必定终止。
由于bw与bb相同,可以认为只有bb, ww两种情况。每次同色bb,ww,都会加入黑色,所以在白豆数量减少至1个或0个(0还是1取决于白豆奇数偶数)之前,黑豆不可能取完。所以我们简化为:直接先成对取白豆
当白豆W=2n(偶数)时,先取完所有白豆,剩下的就是黑豆B=B+n,其实此刻黑豆数量没关系,全是黑豆,白豆没有加入途径,最后一轮必定黑豆
当白豆W=2n+1(奇数)时,先成对取白豆至剩余1个白豆,黑豆B=B+n,在成对取出黑豆(记得回想上面的论证,可以认为只有bb,ww两类),最终必定剩余1黑1白(可以反证:剩余2黑1白,2黑成对取出,又加入1黑,得到1黑1白)。1黑1白,异色,白色回罐,黑色丢弃。最终是白色。
结论:白豆偶数,最后一个是黑豆;白豆奇数,最后一个是白
- 证明如下:设B个黑豆,W个白豆,总数S=B+W,取2个豆子
-
最大子向量:一个向量,每个元素有正有负,求最大子向量的和
-
x = (31, -41, 59, 26, -53, 58, 97, -93, -23, 84) max_so_far = 0 #全局当前最大和 max_ending_here = 0 #从下标0直到当前下标i最大和 for i in x: max_ending_here = max(max_ending_here+i, 0)#至少不为负 max_so_far = max(max_so_far, max_ending_here)
-
编程珠玑笔记1
最新推荐文章于 2018-02-17 18:03:00 发布