找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
下面的解法都是找到从左到右第一个重复的数字
/**
* @param {number[]} nums
* @return {number}
*/
var findRepeatNumber = function(nums) {
// const newNums = new Set()
// let i = 0
// while (i < nums.length) { // 104ms
// if (newNums.has(nums[i])) return nums[i]
// newNums.add(nums[i])
// i++
// }
// for (let i = 0; i < nums.length; i++) { // 84ms
// if (newNums.has(nums[i])) return nums[i]
// newNums.add(nums[i])
// }
// for (let i = 0; i < nums.length;) { // 3660ms 目前内存消耗最少
// const target = nums.shift()
// if (nums.indexOf(target) > -1) return target
// }
// const target = []
// for (let i = 0; i < nums.length; i++) {
// // if (target.indexOf(nums[i]) > -1) { // 1488ms
// // return nums[i]
// // }
// if (target.includes(nums[i])) { // 1508ms
// return nums[i]
// }
// target.push(nums[i])
// }
// const target = {}
// for (let i = 0; i < nums.length; i++) { // 100ms
// if (target[nums[i]]) {
// return nums[i]
// }
// target[nums[i]] = true
// }
const target = new Map()
for (let i = 0; i < nums.length; i++) { // 108ms
if (target.get(nums[i])) {
return nums[i]
}
target.set(nums[i], true)
}
};