题解思路:
方法一:用hash法;hash有键和值,vectorhash(nums.size(),0);
或者用unordered_map<int ,int>m;
函数代码:
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
int len=nums.size();
vector<int>hash(len,0);
int res;
for(int i=0;i<len;i++)
{
hash[nums[i]]++;
}
for(int i=0;i<len;i++)
{
if(hash[i]>1)
{
res=i;
}
}
return res;
}
};
代码二:
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
int len=nums.size();
unordered_map<int,int>m;
int res;
for(int i=0;i<len;i++)
{
m[nums[i]]++;
}
for(int i=0;i<len;i++)
{
if(m[i]>1)
{
res=i;
}
}
return res;
}
};
代码三:数组实现,基于桶排序
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
int len=nums.size();
if(len<1)
{
return -1;
}
vector<int>arr(len,0);
for(int i=0;i<len;++i)
{
arr[nums[i]]++;
if(arr[nums[i]]>1)
{
return nums[i];
}
}
return -1;
}
};
方法二:排序法
对数组排序,在遍历数组判断前后数字是否一样,有重复,则输出数组元素。
函数代码:
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
int len=nums.size();
for(int i=1;i<len;i++)
{
if(nums[i]==nums[i-1])
{
return nums[i];
}
}
return -1;
}
};
方法三:交换法
遍历数组,交换数组的元素,直到遇到重复的元素。
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
for(int i=0;i<nums.size();i++)
{
while(nums[i]!=i)
{
if(nums[i]==nums[nums[i]])
{
return nums[i];
}
else
{
swap(nums[i],nums[nums[i]]);
}
}
}
return -1;
}
};
方法四:用hashset
函数代码:
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
unordered_set<int> s;
for(int i : nums)
{
// 假如hashset中已经有i了,说明重复了,返回i
if(s.count(i) != 0) return i;
else s.insert(i);
}
return -1;
}
};
代码二:
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
//* 遍历放进Set中,利用集合的特性(唯一性)进行解决
//* 如果放不进去,那么就说明该元素重复
set<int> myset;
for (size_t i = 0; i < nums.size(); i++) {
if(!myset.insert(nums[i]).second)
{
return nums[i];
}
}
return -1;
}
};
代码三:
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
//* 遍历放进Set中,利用集合的特性(唯一性)进行解决
//* 如果放不进去,那么就说明该元素重复
unordered_set<int> myset;
for (int i = 0; i < nums.size(); i++) {
if(!myset.insert(nums[i]).second)
{
return nums[i];
}
}
return -1;
}
};