方法一
哈希表/Set
方法二:原地交换
数组元素的索引和值是一对多的关系
因此可以遍历数组并通过交换操作,使元素的索引与值一一对应,即nums[i]=i
。就可以通过索引映射对应的值,起到与字典等价的作用。
遍历中,第一次遇到数字x时,将其交换至索引x处,而当第二次遇到数字x时,一定有numsp[x] = x
,此时就可以得到一组重复的数字
var findRepeatNumber1 = function (nums) {
const obj = {}
for (const i of nums) {
if (!obj[i]) {
obj[i] = true
} else {
return i
}
}
}
var findRepeatNumber2 = function (nums) {
for (let i = 0; i < nums.length; i++) {
if (i === nums[i]) {
continue
} else {
let temp = nums[nums[i]]
if (temp === nums[i]) {
return temp
}
nums[nums[i]] = nums[i]
nums[i] = temp
}
}
}
console.log(findRepeatNumber2([2, 3, 1, 0, 2, 5, 3]));