剑指offer-找出数组中重复的数字(C语言实现)
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入: [2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
int findRepeatNumber(int* nums, int numsSize){
// 边界条件
// 如果数组是空的或者输入的numsSize 不合理
if((nums == NULL)||(numsSize <= 0))
return -1;
// 边界条件
// 如果数组中的数据小于或大于索引值
for(int i = 0; i < numsSize; i++)
{
if((nums[i] < 0)||(nums[i] > numsSize - 1))
return -1;
}
// 通过循环来判断每个索引值i
// 是否等于在该索引上的值nums[i]
// 如果不等则将值nums[i]放置于nums[i]索引处
// 如果等于则出现重复数字
for(int i = 0; i < numsSize; i++)
{
while(i != nums[i])
{
if(nums[nums[i]] == nums[i])
{
return nums[i];
}
int tmp = nums[i];
nums[i] = nums[tmp];
nums[tmp] = tmp;
}
}
return -1;
}