时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:523718
本题知识点: 数组
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中第一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
返回描述:
如果数组中有重复的数字,函数返回true,否则返回false。
如果数组中有重复的数字,把重复的数字放到参数duplication[0]中。(ps:duplication已经初始化,可以直接赋值使用。)
思路:通过map进行记录已有数字,进行快速比对
function duplicate(numbers, duplication) {
if (numbers.length == 0) return false
let map = new Map();
for (let i = 0; i < numbers.length; i++) {
if (map.has(numbers[i])) {
duplication[0] = numbers[i]
return true
} else {
map.set(numbers[i], i)
}
}
return false
}
没有通过,但是自己测试全部通过,这个对比的错误换行不知道什么意思,JavaScript语言还没有人通过,按照这个题目的难度不应该,应该是这个题目答案比对有问题。
欢迎指正,感谢
上面题目同理于力扣的剑指Offer,题目类似,思路一致,在力扣是可以通过
剑指 Offer 03. 数组中重复的数字
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
/**
* @param {number[]} nums
* @return {number}
*/
var findRepeatNumber = function (nums) {
if (nums.length == 0) return false
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], i)
}
}
return false
};