寻找数组中的重复元素,数组长度为n,其中的元素范围在0~n-1之间。
思路:
方法①:将数组排序,若相邻位置元素重复,则返回。时间复杂度O(nlogn),空间复杂度O(logn).
class Solution
{
public:
int findRepeatNums(vector<int>& nums)
{
if(nums.size()==0) return -1;
sort(nums.begin(),nums.end());
for(int i=0;i!=nums.size();i++)
{
if(nums[i]==nums[i+1])
{
return nums[i];
}
}
return -1;
}
}
方法②:暴力法,每个元素找出在后面是否有重复元素。时间复杂度O(n^2),空间复杂度O(1)。
方法③:哈希表。时间复杂度O(n),空间复杂度O(n)。
class Solution
{
public:
int findRepeatNums(vector<int>& nums)
{
if(nums.size()==0) return -1;
unordered_map<int,int> m;
for(int i=0;i!=nums.size();i++)
{
if(++m[nums[i]]>1) return nums[i];
}
return -1;
}
}