题目描述
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
思路
1.哈希
利用Set,因为Set添加元素时,会自动忽略重复的元素,如果长度没有增加,就输出当前元素就好
var findRepeatNumber = function(nums) {
const occ = new Set();
for(var i in nums){
var length = occ.size;
occ.add(nums[i]);
if(occ.size == length)
return nums[i]
}
};
2.利用对象
利用下标和值的方式模拟map的对应关系
var findRepeatNumber = function(nums) {
let numMap = {};
for(var i = 0; i<nums.length;i++){
if(numMap[nums[i]]!==undefined){
return nums[i]
}else{
numMap[nums[i]]=1
}
}
};
总结:
一般有关重复的元素,都需要去查找有无这个重复元素的位置,这时候如果用一般的方法去查找,会增加时间复杂度。最好用哈希来做。
本文正在参与「掘金 2021 春招闯关活动」, 点击查看【 活动详情】