给定一个包含 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
必须再次通过PhP大于n / 2
。取该范围并重复。
我认为这是一个相当不错的解决方案,但面试官暗示可以做得更好。如果您知道任何更好的解决方案,请发布。