【发布时间】:2009-10-19 03:44:45
【问题描述】:
我的一位同事使用的一个有趣的面试问题:
假设给定一个非常长的、未排序的无符号 64 位整数列表。您如何找到列表中没有出现的最小非负整数?
FOLLOW-UP:既然已经提出了通过排序的明显解决方案,你能比 O(n log n) 更快吗?
跟进:您的算法必须在具有 1GB 内存的计算机上运行
澄清:该列表位于 RAM 中,但可能会占用大量内存。预先给你列表的大小,比如 N。
【问题讨论】:
-
我认为您可以省略非负部分,看看您是如何谈论无符号整数的。
-
这个问题非常基本,除非我是国际海事组织的 waaaay off-base,但是,正如其他人所提到的,有一些问题要问,或者应该说明一些假设。
-
@paxdiablo:在这种情况下,说 O(n) 并没有那么大的意义。即使你将你的 2^64 位数组存储在复活节岛上的粘土片上并通过信鸽访问它,算法仍然是 O(n)。
-
中途更改内存要求使这是一个很好的面试问题;-)
-
我认为有趣的是所有答案都使用相同的通用解决方案(对数组进行排序并找到破坏序列的第一个值),但它们都使用不同的排序。 (修改后的快速排序,基数排序,...)接受的答案等同于丢弃 N 以上元素的计数排序。