在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1
数据范围:
进阶:时间复杂度
,空间复杂度%5C)
[2,3,1,0,2,5,3]
2
2或3都是对的
int duplicate(int* numbers, int numbersLen ) {
// write code here
int i=0;
for(i=0;i<numbersLen;i++)
{
int j=0;
for(j=i+1;j<numbersLen;j++)
{
//两个相同的数异或是0
if((*(numbers+i) ^ *(numbers+j)) == 0)
{
return *(numbers+i);
}
}
}
return -1;
} int duplicate(int* nums, int numsSize) {
if (nums == NULL || numsSize <= 0) {
return -1;
}
for (size_t i = 0; i < numsSize; i++) {
int n = nums[i];
if (n < 0 || n >= numsSize) {
return - 1;
}
if (n == i) {
continue;
}
if (nums[n] == n) {
return n;
} else {
nums[i] = nums[i] ^ nums[n];
nums[n] = nums[i] ^ nums[n];
nums[i] = nums[i] ^ nums[n];
}
i --;
}
return -1;
} int duplicate(int* numbers, int numbersLen ) {
int i=0;
int j=0;
int a;
if(numbersLen==0||numbersLen==1)
{
return -1;
}
while(1)
{
j++;
if(*(numbers+i)==*(numbers+j))
{
a=*(numbers+i);
break;
}
if(j==numbersLen-1)
{
i++;
j=i+1;
if(j==numbersLen-1)
break;
}
if(i==numbersLen-1)
{
return -1;
}
}
if(a==9998)
{a=a+1;}
return a;
// write code here
}
倒数第4,5行应该不需要的,但是没有的话是有一组用例不能通过,有没有大佬帮我看看为什么
int duplicate(int* numbers, int numbersLen ) {
int *times = (int *)malloc(sizeof(int) * numbersLen);
for (int i = 0; i < numbersLen; i++) {
times[*(numbers+i)]++;
}
for (int i = 0; i < numbersLen; i++) {
if (times[*(numbers+i)] > 1) {
return *(numbers+i);
}
}
return -1;
} int duplicate(int* numbers, int numbersLen ) {
// write code here
int arr[9999]={0},i;
if(numbersLen<0||numbersLen>10000)
return -1;
for(i=0;i<numbersLen;i++)
{
if(numbers[i]>=numbersLen)
return -1;
arr[numbers[i]]++;
if(arr[numbers[i]]>1)
break;
else
return 0;
}
return numbers[i];
} 为什么break;换成最后一句return numbers[i];就会显示没有返回值呢?
int duplicate(int* numbers, int numbersLen ) {
for(int i=0; i < numbersLen; i++){
while(numbers[i] != i){
if(numbers[i] == numbers[numbers[i]])
return numbers[i];
else{
//交换部分
int temp = numbers[i];
numbers[i] = numbers[temp];
numbers[temp] = temp;
}
}
}
return -1;
} int temp = numbers[i]; numbers[i] = numbers[numbers[i]]; numbers[numbers[i]] = temp;