每周一题:数组中重复的数字(更新JS)

题目:

找出数组中重复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

示例 1:

输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3

代码:

var findRepeatNumber = function(nums) {
    nums=nums.sort();
    for(let i=0;i<nums.length-1;i++){
        if(nums[i]==nums[i+1]){
        return nums[i];
        }
    }
};
 
通过率:
 
思路:
这道题主要目的为找出数组中一个重复的数字即可,不需要我们全部输出(想将重复数字全部输出也可),所以可以先将数组进行大小排序,这样相同的数字会排在前后位,然后建立循环,假如两个前后位数据元素相等,便代表找到了重复的数字,即可得出答案。
但是这种方法,执行用时呵内存消耗都过于长久和庞大,在了解到这个问题后,我对代码尝试做了以下改进。
 
优化代码:
var findRepeatNumber = function(nums) {
    var map = {};
    for(var i = 0 ; i< nums.length; i++){
        if(!map[nums[i]]){
            map[nums[i]] = 1; 
        }else {
            return nums[i];
        }
    }
};
 
通过率:
 
 思路

这次代码主要用hash遍历,注意这里只需要判断所取数字是否重复,而不用关系数字在其中的的顺序,只需要hash表存储之前遍历的,如果后续遍历已经在hash表上,就可以返回这个数值。将代码进行优化后,执行用时和内存消耗都比第一次的代码好上很多。

原文地址:https://www.cnblogs.com/sayg-1207/p/13457915.html