思路
利用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())
{
i++;
j++;
}
//如果j>=numbers.size(),则证明无重复元素
if(j>=numbers.size())
return -1;
else
return numbers[i];
}
};
sort函数的用法
sort 在 STL 库中是排序函数,有时冒泡、选择等 O(n2) 算***超时时,我们可以使用STL中的快速排序函数 O(nlogn) 完成排序。
sort函数的原型如下
template <class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
可以看到sort函数有两个参数和三个参数两种形式。
sort函数(两个参数形式)
sort函数的前两个参数是起始地址和终止地址的下一地址,如对数组a[100]排序:区间是a[0]到a[99],但是要写成sort(a,a+100)。
对向量(vector)排序:sort(v.begin(),v.end())。
sort函数(第三个参数)
sort函数的第三个参数是比较函数。使用前两个参数排序默认是升序的,如果想实现降序的话,则需要使用第三个参数。例如:
//自定义比较函数
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int a[10]={1,5,6,4,3,2,4,9,10,7};
sort(a,a+10,cmp);
}
可以看出第三个参数就是利用了回调函数。