首页 > 编程语言 > 详细

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

时间:2020-08-09 23:30:42      阅读:102      评论:0      收藏:0      [点我收藏+]

题目:

找出数组中重复的数字。

在一个长度为 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表上,就可以返回这个数值。将代码进行优化后,执行用时和内存消耗都比第一次的代码好上很多。

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!