题目来源:https://www.acwing.com/problem/content/description/15/
方法一:哈希表
class Solution {
public:
int duplicateInArray(vector<int>& nums)
{
unordered_map<int, int> umap;
for (int i = 0; i < nums.size(); i ++ )
{
if (umap.find(nums[i]) == umap.end())
umap.insert({nums[i], 1});
else return nums[i];
}
return -1;
}
};
方法二:vector代替哈希
class Solution {
public:
int duplicateInArray(vector<int>& nums)
{
vector<bool> result(nums.size(), false);
for (int i = 0; i < nums.size(); i ++ )
{
if (result[nums[i]] == false)
result[nums[i]] = true;
else return nums[i];
}
return -1;
}
};
方法三:下标法
class Solution {
public:
int duplicateInArray(vector<int> nums)
{
for (int i = 0; i < nums.size(); i ++ )
{
while (i != nums[i])
{
if (nums[i] == nums[nums[i]]) return nums[i];
swap(nums[i], nums[nums[i]]);
}
}
return -1;
}
};