Raj*_*Raj 2 algorithm
数组a[]包含从0到N的所有整数,除了一个.但是,您无法通过单个操作访问元素.相反,你可以调用get(i, k)哪个返回第k位,a[i]或者你可以调用swap(i, j)哪个交换第i个和第j个元素a[].设计O(N)算法以找到缺失的整数.(为简单起见,假设N是2的幂.)
a[]
get(i, k)
a[i]
swap(i, j)
ami*_*mit 9
如果N是2的幂,则可以O(N)使用除法和征服来完成.
O(N)
请注意,logN数字中有位.现在,使用此信息 - 您可以使用基于分区的选择算法和基数排序的组合.
logN
swap()
ceil(N/2)
floor(N/2)
这种方法的复杂性将是N + N/2 + N/4 + ... + 1 < 2N如此O(n)
N + N/2 + N/4 + ... + 1 < 2N
O(n)
归档时间:
13 年,11 月 前
查看次数:
4507 次
最近记录:
13 年,4 月 前