题目来源:
剑指offer
题目简介:
一个长度为n的数组中所有的数字都在0-n-1的范围内。数字中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
思路:
在不使用哈希表的情况下,我们为了降低空间复杂度,我们可以尝试一种排序加比较的方法,我们先把下标为0的位置的数是否与0相等,不相等就往后扫描,遇到0了,就交换两数,没遇到就再检查下标为1的把1找到后,再扫描,扫描的过程中只要发现有重复的就返回那个值。
代码实现:
int findRepeatNumber(int* nums, int numsSize){
int now;
int temp;
while(1){
for (int i = 0; i < numsSize; i++){
if(nums[i] == i)
continue;
else{
now = nums[i];
nums[i] = -1;
break;
}
}
while (1){
if(nums[now] == now)
return now;
else{
temp = nums[now];
nums[now] = now;
now = temp;
if (now == -1)
break;
}
}
}
}