【发布时间】:2011-05-01 17:53:36
【问题描述】:
可能重复:
Quickest way to find missing number in an array of numbers
输入:未排序数组 A[1,..,n] 包含范围 0,..,n 中除一个整数之外的所有整数
问题是在 O(n) 时间内确定丢失的整数。 A 的每个元素是 以二进制表示,唯一可用的操作是函数 bit(i, j),它 返回 A[i] 的第 j 位的值,并花费常数时间。
有什么想法吗?我认为某种分而治之的算法是合适的,但我想不出我到底应该做什么。提前致谢!
【问题讨论】:
-
如果 bit(i,j) 是唯一可用的操作,您建议如何实现分治算法?
-
@A. Rex:你链接的可能的骗子对指令没有相同的限制,所以我认为它不一定是骗子。
-
这不是重复的。在这个问题中,您只能读取输入 A 的 n log n 位中的 O(n)。如果这是唯一的约束(即,如果除了 bit(i, j) 之外的操作)是免费的,那么您仍然可以解决它,使用分治算法,有点:算法的注释大小描述是计算偶数和奇数的数量,检查哪个计数与您从 0 得到的不匹配... n,并在丢弃最低位后递归输入的那一半。
-
这不是 stackoverflow.com/questions/2113795 的副本,正如 Reid 解释的那样,paxdiablo 的回答是错误的。 Reid 的算法是 O(n),如果您在计数时保留一个列表,其中列出了每一半中的元素。
标签: algorithm puzzle divide-and-conquer