题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
1 class Solution { 2 public: 3 // Parameters: 4 // numbers: an array of integers 5 // length: the length of array numbers 6 // duplication: (Output) the duplicated number in the array number 7 // Return value: true if the input is valid, and there are some duplications in the array number 8 // otherwise false 9 bool duplicate(int numbers[], int length, int* duplication) { 10 if(length == 0) return false; 11 //申请空间存放每个数字出现的次数,时间复杂度为o(n) 12 /* int hash[100] = {0}; 13 for(int i = 0; i < length; i++) 14 { 15 hash[numbers[i]]++; 16 if(hash[numbers[i]] > 1)//如果出现的次数大于1则返回 17 { 18 *duplication = numbers[i]; 19 return true; 20 } 21 }*/ 22 //在不能申请多余空间的情况下,可以对数组进行排序,然后前后指针位移进行判断、 23 sort(numbers, numbers + length); 24 for(int i = 0; i < length-1; i++) 25 { 26 if(numbers[i] == numbers[i+1]) 27 { 28 *duplication = numbers[i]; 29 return true; 30 } 31 } 32 return false; 33 } 34 };