摘要: 1. 简述 原题:简略的说,就是一个ID列表,其中每个ID都可能重复出现,其中一个ID的重复出现个数超过了列表长度的一半。要求快速找到这个ID。 扩展:ID列表中,有三个ID,这三个ID重复出现的次数,都超过了列表长度的1/4。要求快速找到这个ID。2. 思路 原题的思路还是编程之美上面的方法,扩展题目的方法是参考中的一篇文章中讲过。 原题的思路是保存一个ID和该ID的计数,然后遍历ID列表,如果当前没有保存的ID(即ID对应次数为0),那么保存遇到的ID,并且计数设置为1;如果遇到的ID刚好是保存的ID,那么计数加1;如果遇到的ID是一个新的ID,那么ID的计数减1。这样遍历之后,保存的ID 阅读全文
posted @ 2011-09-24 22:56 xiaodongrush 阅读(516) 评论(0) 推荐(0) 编辑
摘要: 1. 简述 1) 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。 2) 求N!的二进制表示中最低位1的位置。2. 思路方法一,求出N!,对于第一个题目,记录其0的个数即可,时间复杂度=O(N)+O(N!中0的个数);对于第二个题目,记录二进制中最低位1右边0的个数即可,时间复杂度=O(N)+O(N!中最低位右边0的个数)。这个方法时间复杂度问题不大,不过空间有问题,因为N!增长太快了,N不用很大,N!很容易就溢出了。方法二,不求N!,从N!的因子入手,第一个题目是计算N!中,因子5的个数,因为每个0都是一个10,10=2*5,因 阅读全文
posted @ 2011-09-24 17:49 xiaodongrush 阅读(724) 评论(0) 推荐(0) 编辑