Позвоните по отсутствующему номеру M
.
Вы можете разбить ваш массив на две части в зависимости от того, является ли младший значащий бит A[i]
1 или 0. Меньшая из двух частей (назовите это P_1
) не более (n-1)/2
элементов size, и он сообщает вам, является ли младший значащий бит M
1 или 0.
Теперь рассмотрим 2-й бит для элементов P_1
. Опять же, эта часть может быть разделена на две части, и меньшая из двух частей (P_2
) говорит вам, должен ли этот бит быть 1 или 0.
Продолжайте (P_3
, P_4
, ...), пока не поймете, что такое все биты.
Вы можете доказать, что это O(n)
, потому что вы по сути смотрите на n + n/2 + n/4 + ...
различные отдельные биты в вашем массиве, и эта сумма меньше 2n
.