Integer 重复整数

Integer 重复整数,integer,duplicates,Integer,Duplicates,我在学习计算机科学,有人问我这个问题: 长度为n+1的数组填充范围为[1,n]的整数。用O(1)空间在线性时间内找到一个重复的整数(只有一个,不是全部)。该数组是只读的,不能修改。变体:如果数组可以写入,但必须不被算法修改,该怎么办 如果有人能帮忙,那就太好了。 谢谢假设数组为1索引: n=size; x=a[n];y=a[a[n]]; while(x!=y) { x=a[x];y=a[a[y]]; } y=n; while(x!=y) {

我在学习计算机科学,有人问我这个问题:

长度为n+1的数组填充范围为[1,n]的整数。用O(1)空间在线性时间内找到一个重复的整数(只有一个,不是全部)。该数组是只读的,不能修改。变体:如果数组可以写入,但必须不被算法修改,该怎么办

如果有人能帮忙,那就太好了。
谢谢

假设数组为1索引:

n=size;
x=a[n];y=a[a[n]];
while(x!=y)                       
{
    x=a[x];y=a[a[y]];
}
y=n;
while(x!=y)
{
    x=a[x];y=a[y];
}
printf("DUPLICATE: %d",y);
这种技术被称为波拉德的rho方法