Учитывая массив из 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. Возьмите этот диапазон и повторите.
Я думал, что это довольно хорошее решение, но интервьюер вроде намекнул, что можно сделать лучше. Пожалуйста, разместите любые лучшие решения, о которых вы знаете.
