在一个长度为n的数组里所有的数字都在0-n-1的范围里。数组某些数字是重复的,但是不知道有几个数字重复了,也不知道重复了几次。请找出数组中重复的数字
1.首先判断数组指针是否为空,判断数组的长度是否为边界值
2.进行循环判断数组中的数字有没有没有满足题意的
3.进行for循环判断每个数是否等于自己的下标
4.不相等的进行交换
5.假设下标为5的数字等于下标为2的数字那么找出一个重复的数字
#include<stdio.h>
int my_duplicate(int number[],int len,int* dup)
{
int i = 0;
int temp = 0;
if(number == NULL || len <= 0)
return 0;
for(i = 0; i<len ; i++)
{
if(number[i]<0 || number[i]>len-1)
return 0;
}
for(i = 0; i<len; i++)
{
while(number[i] != i)//与下标不相等则开始查找
{
if(number[i] == number[number[i]])
{
*dup = number[i];
return 1;
}
temp = number[i];
number[i] = number[temp];
number[temp] = temp;
}
}
}
int main()
{
int i = 0;
int arr[6] = {3,1,0,2,5,3};
int sz = sizeof(arr)/sizeof(arr[0]);
int dup;
my_duplicate(arr,sz,&dup);
return 0;
}