题目描述
给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内。
数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。
请找出数组中任意一个重复的数字。
样例
给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。
返回 2 或 3。
算法----利用哈希表
感觉这里只要注意的是每次先查询哈希表里面的数字,看是否有重复的,再加入新的元素,代码如下,可以AC
C++ 代码
class Solution {
public:
int duplicateInArray(vector<int>& nums) {
unordered_map<int, int> res;
int n = nums.size();
int t = -1, cnt = 0;
for(int i = 0; i < n; i++)
{
if(n < 0) return -1;;
if(nums[i] < 0 || nums[i] > n - 1) return -1;
if(res[nums[i]]) {
t = nums[i];
cnt++;
}
res[nums[i]] = i;
}
if(cnt == 0) return -1;
return t;
}
};