剑指OfferJZ50数组中重复的数字(JavaScript:Map)

时间限制: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
};

猜你喜欢

转载自blog.csdn.net/weixin_44523860/article/details/113727945