基本思路为循环⌈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)