在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1
数据范围:
进阶:时间复杂度,空间复杂度
[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;