描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1
数据范围:0≤n≤10000
进阶:时间复杂度O(n) ,空间复杂度O(n)
示例1
输入:[2,3,1,0,2,5,3]
返回值:2
说明:2或3都是对的
思路:
利用algorithm中的sort函数对数组排序,然后利用两个指针遍历数组,返回第一个两个指针指向值相同的元素。如果没有重复元素,那么指针最后会一直往后走,这里一定要考虑边界情况
代码:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型vector
* @return int整型
*/
int duplicate(vector<int>& numbers) {
sort(numbers.begin(),numbers.end());//排序函数(默认是升序)
int i = 0;
int j = 1;
//防止空集合的出现(如果数组为空,直接返回-1)
if(j>=numbers.size())
return -1;
while(numbers.at(i)!=numbers.at(j)&&j<numbers.size())//numbers.at(i)与numbers[i]一样,但进行了边界检查
{
i++;
j++;
}
//如果j>=numbers.size(),则证明无重复元素
if(j>=numbers.size())
return -1;
else
return numbers[i];
}
};