1 题目及要求
1.1 题目描述
在长度为n的整数数组里的所有的数字都在0到n-1范围内。数组中某些数字是重复的,但不知道有几个数字重复,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果数字长度为7的数组{2, 3, 1, 0, 2, 5, 3}重复的数字是2和3,所以答案是2或3都正确。
2 解答
2.1 代码
int duplicate(int *v, int vn){
if(!v || vn<1) return -1;
for(int k1(0);k1<vn && -1<v[k1] && v[k1]<vn;){
if(v[k1]==k1) ++k1;
else{
if(v[k1]==v[v[k1]]) return v[k1];
else swap(v[k1],v[v[k1]]);
}
}
return -1;
}