1 题目分析
链接:图解算法数据结构 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 (leetcode-cn.com)
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
思路:由于只要求输出一个数字,因此只需要用哈希表做一个判断,若已存在则结束循环,输出当前数值,很简单。
2 代码实现
运用哈希表内嵌函数find()
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
unordered_map<int, int> map;
for (int num:nums) {
if (map.find(num) != map.end()){
return num;
break;
}
map[num]= num;
}
return -1;
}
};
或直接查询当前元素对应的键值是否已被定义
map[0]被自动初始化为0,因此此处要将其初始化为1
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
unordered_map<int, int> map;
map[0] = -1;
for (int num:nums) {
if (map[num] == num){
return num;
break;
}
map[num]= num;
}
return -1;
}
};