题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
注意: 题目要求我们找到任意一个重复的数字就可以!我一开始没有注意审题,绕了圈子。
思路
1.暴力搜索
将数组排序,然后从头到尾扫描排序后的数组。
2.哈希
从头到尾扫描数组里的每一个数字,如果当前哈希表里没有这个数字,就把它加入哈希表中。如果有,则抛出。
这个思路和Leetcode里的Two Sum几乎一样,存入哈希表,检测有没有。Two Sum里是将作差后的值存入哈希表里。
js方法实现
function duplicate(numbers,duplication){
var length=numbers.length;
var hashMap=new Map();
if (numbers.length==0) return false;
for (var i=0;i<numbers.length;i++) {
if (hashMap.has(numbers[i])) {
duplication[0]=numbers[i];
return true;
} else {
hashMap.set(numbers[i],1);
}
}
return false;
}