30
生成一个整数,该整数不在给定的40亿个整数中
我得到了这个面试问题: 给定一个具有40亿个整数的输入文件,请提供一种算法来生成文件中不包含的整数。假设您有1 GB的内存。如果只有10 MB的内存,请执行后续操作。 我的分析: 文件大小为4×10 9 ×4字节= 16 GB。 我们可以进行外部排序,从而让我们知道整数的范围。 我的问题是在已排序的大整数集中检测丢失的整数的最佳方法是什么? 我的理解(阅读所有答案之后): 假设我们正在谈论32位整数,那么有2 32 = 4 * 10 9个不同的整数。 情况1:我们有1 GB = 1 * 10 9 * 8位= 80亿位内存。 解: 如果我们用一位代表一个不同的整数,那就足够了。我们不需要排序。 实现方式: int radix = 8; byte[] bitfield = new byte[0xffffffff/radix]; void F() throws FileNotFoundException{ Scanner in = new …