题目描述
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
解答
解法一:排序
先将数组排序,再查找重复数字
var findRepeatNumber = function(nums) {
nums.sort((a, b) => a - b)
let pre = nums[0]
for (let i = 1; i < nums.length; i++) {
if (pre == nums[i]) {
return pre
} else {
pre = nums[i]
}
}
}
解法二:哈希表
-
哈希表的结构是:number-boolean,number 就是数组中的数字,boolean 代表数字是否出现过。
-
整体的流程是:遍历数组中的数字,检查是否出现过
- 如果没有出现,则标记这个数为true
- 如果出现过,那么返回此数字
var findRepeatNumber = function(nums) {
const map = {};
for (const num of nums) {
if (!map[num]) {
map[num] = true;
} else {
return num;
}
}
};
好像哈希表执行时间确实快很多,但是平时写代码用的很少,我去翻相关资料补习一下啦~~