Учитывая массив из n+1
целых чисел, каждый в диапазоне от 1
до n
, найдите целое число, которое повторяется.
Меня попросили на собеседовании. Здесь мой ответ: "Принцип Голубоглазый" говорит, что должно быть повторение. Я попытался использовать подход двоичного поиска, поэтому я сделал это в Matlab, потому что это то, что я знаю:
top = 0;
bot = 0;
for i=1:n+1
if P[i] > n/2
top = top+1;
else
bot = bot+1;
end
Итак, я утверждаю, что один из них, top
или bot
, должен снова быть больше, чем n/2
. Возьмите этот диапазон и повторите.
Я думал, что это довольно хорошее решение, но интервьюер вроде намекнул, что можно сделать лучше. Пожалуйста, разместите любые лучшие решения, о которых вы знаете.