题目:
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
题解思路:
方法一:双指针+快慢指针
函数代码:
class Solution {
public:
int findDuplicate(vector<int>& nums) {
int slow=0;
int fast=0;
slow=nums[slow];
fast=nums[nums[fast]];
while(fast!=slow)
{
slow=nums[slow];
fast=nums[nums[fast]];
}
int i=0;
int j=slow;
while(i!=j)
{
i=nums[i];
j=nums[j];
}
//return j等同于return i;
return i;
}
};
方法二:哈希表+计数排序
class Solution {
public:
int findDuplicate(vector<int>& nums) {
unordered_map<int,int>m;
for(int i=0;i<nums.size();i++)
{
m[nums[i]]++;
}
for(int i=0;i<nums.size();i++)
{
if(m[nums[i]]>1)
{
return nums[i];
}
}
return -1;
}
};