找出数组中的重复数字
题目描述
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
- 限制:2 <= n <= 100000
示例
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
解题思路
暴力破解
额,这个方法最容易想到吧!!!特别是像我这种菜鸟!!!
这方法没啥好说的,双重循环查找就好了,让我难以置信的是居然过了!!!!
时间复杂度O(n²)
var findRepeatNumber = function(nums) {
for (let i=0; i<nums.length; i++) {
for (let j=i+1; j<nums.length; j++) {
if (nums[i] === nums[j]) {
return nums[i]
}
}
}
};
// 时间复杂度O(n²)
哈希
额,这也没啥好说的,Map是ES6中的语法,不明白的可以看看阮大神的教程
时间复杂度o(n)
var findRepeatNumber = function(nums) {
let map = new Map()
for (let i=0; i<nums.length; i++) {
if (map.has(nums[i])) {
return nums[i]
} else {
map.set(nums[i])
}
}
};