给定数组A,检查A [i] = i是否存在任何i。
我应该比线性时间更快地解决这个问题,这对我来说似乎是不可能的。我想出的解决方案是首先在n * log(n)时间内对数组进行排序,然后您可以轻松地检查比线性时间更快的数据。但是,由于数组未分类,我看不到“有效”的解决方案?
答案 0 :(得分:6)
对于任意(未排序)数组,不能一个复杂度高于O(N)
的正确算法。
假设您的解决方案优于O(N)
。这意味着算法必须省略数组的某些项,因为扫描所有项目是O(N)
。
构建A
,使所有A[i] != i
i
然后运行算法。
设A[k]
为已省略的项目。将k
分配给A[k]
,
再次运行算法 - 当预期no such items
时,它将返回k
。
答案 1 :(得分:1)
你将获得带有并行算法的O(log n)(你没有限制它)。只需以ld(N)步骤启动N个处理器,然后让它们并行检查数组项。