阅读《编程珠玑》遇到的问题1:给定包含4300 0000 000个32位整数的顺序文件,如何找出出现至少两次的整数?
该题来自《编程珠玑》第二章课后习题第2题,课后给出的答案如下所示,但是这个答案我没有看懂, 求解惑。
疑问:顺序文件可以随机访问吗?我想访问第10个整数,就必须要从得先访问第1个、第2个、、第9个吗?
如果支持随机访问的话,我们可以用二分法对这个顺序文件进行搜索,时间复杂度应该为log(n),空间复杂度为O(1), 我就只需把我们随机访问的数放在内存里就可以了。
如果不可以随机访问的话,那么我们就一次遍历这个顺序文件,检查相邻两个元素的是否相等,就可以找到找到一个至少出现两次的整数了。而且每次我们只需要将当前访问的数放在内存中,故空间复杂度应该为O(1),时间复杂度为O(n)。
但是从课后给出的答案来看,我的想法应该是有问题的。