• 每周一题:数组中重复的数字(更新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表上,就可以返回这个数值。将代码进行优化后,执行用时和内存消耗都比第一次的代码好上很多。

  • 相关阅读:
    POJ 3069 Saruman's Army
    POJ 3617 Best Cow Line
    Part5核心初始化_lesson2---设置svc模式
    Part5核心初始化_lesson1---异常向量表
    Part4_lesson4---Bootloader架构设计
    Part4_lesson3---U-Boot工作流程分析
    zigbee--绑定
    Part4_lesson2---ARM处理器这个硬件启动流程分析
    Part4_lesson1---Bootloader设计蓝图
    zigbee之MAC地址发送
  • 原文地址:https://www.cnblogs.com/sayg-1207/p/13457915.html
Copyright © 2020-2023  润新知