基本思路为循环⌈lgn⌉ 次, 第i步中寻找数组中和缺失数关于2i同余的数 ,最终的余数就是答案
设第i次循环开始前,待搜索数组的大小为 sizei ,则按照前面的思路,该数组中的元素和缺失数关于 2i−1同余 。若我们将这些数连同缺失数从小到大排序,则会发现它们的前 i−1 位相同,第i位应当交替出现0和1,故第i位应当有 ⌈sizei+12⌉个0,⌊sizei+12⌋个1 。我们只需遍历一遍即可找出缺失的是0还是1,然后选取第i位为该值的数,容易发现 sizei+1≤⌈sizei/2⌉
故总开销时间为 ∑⌈lgn⌉i=1n2i=O(n)
本文介绍了一种基于循环⌈lgn⌉次的算法来寻找缺失数,通过在每一步中寻找数组中和缺失数关于2^i同余的数,并最终确定缺失数的最后一位。算法总开销时间为O(n),实现高效查找。
8817

被折叠的 条评论
为什么被折叠?



