美文网首页
面试题3:数组中重复的数字

面试题3:数组中重复的数字

作者: IvyAutumn | 来源:发表于2019-02-21 22:02 被阅读0次

测试用例:

  • 长度为n的数组里包含一个或者多个重复的数字
  • 数组中不包含重复的数字
  • 无效输入测试用例(输入空数组;长度为n的数组中包含0~n-1之外的数字)

解决思路一

先排序:使用数组的sort(fun)方法,注意对数字排序需要自己写一下fun方法。
从头到尾扫描排序后的数组。若相邻两个数相同,则该数组中有重复的数字。

 function findReNumber(arr) {
    if(arr.length == 0){
        return false;
    }

    arr.every(function(x){
        return x>=0 && x<arr.length;
    })
    arr.sort(function(a,b){
        return (a-b);
    });
    
    for(var i = 0; i<arr.length-1;i++){
        if(arr[i]===arr[i+1]){
            return true;
        }
    }
    return false;
 }

解决思路二

利用哈希表。使用Set可以达到目的。
遍历,每遍历到一个数字的时候如果表中没有这个数字,则加入;如果有这个数字,则表明重复。
算法的时间复杂度为O(n),但是它提高时间效率是以一个大小为O(1)的哈希表为代价的。

 function findReNumber(arr) {
    if(arr.length == 0){
        return false;
    }

    arr.every(function(x){
        return x>=0 && x<arr.length;
    })
    var set = new Set();
    for(var i=0; i<arr.length;i++){
        if(set.has(arr[i]))
            return true;
        else
            set.add(arr[i]);
    }
    return false;
 }

解决思路三

重排数组的方法,能够实现时间复杂度为O(n),空间复杂度为O(1)

const findDuplicate = (arr,length) => {
    if(arr=null||length<=0)
        return false;
    for(let val of arr){
        if(var<0 || var>n-1)
            return false;
    }

    for(let i = 0; i < length; i++){
        while(arr[i]!=i){
            if(arr[i]==arr[arr[i]]){
                return true;
            }else{
                [arr[i],arr[arr[i]] = [arr[arr[i], arr[i]];
            }
        }
    }

    return false;
} 

相关文章

  • 剑指offer

    面试题3——数组中重复的数字 使用LinkedHashMap,有序存放。 面试题4——二维数组中的查找 首先选...

  • 剑指offer面试题分类总结

    数组: 面试题3:数组中重复的数字面试题4:二维数组中的查找面试题21:调整数组顺序使奇数位于偶数前面面试题39:...

  • 数据结构

    面试题3:数组中重复的数字在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复...

  • 剑指Offer第二版 面试题3 数组中重复的数字

    剑指Offer第二版 面试题3 心得 数组中重复的数字: 题目一:找出数组中重复的数字。 在一个长度为n的数组里的...

  • 剑指offer学习笔记:8.1 数组

    面试题51:数组中重复的数字在一个长度为n的数组中,所有数字都在0到n-1的范围内。数组中的某些数字是重复的,但是...

  • 2.3.1 数组

    面试题3:数组中重复的数字 面试题4:二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一...

  • 剑指offer 1-33题

    面试题3:数组中重复的数字(长度为n的数组里,所有数字都在0~n-1的范围里) 方案1:先将数组排序,再从头到尾扫...

  • LeetCode | 面试题03. 数组中重复的数字【剑指Off

    LeetCode 面试题03. 数组中重复的数字【剑指Offer】【Easy】【Python】【数组】【哈希表】【...

  • 数组中重复的数(题目一)

    《剑指offer》面试题3:题目一:找出数组中重复的数字。 题目:在一个长度为n的数组里的所有数字都在0~n-1范...

  • 剑指offer题集

    [3] 数组中重复的数字 题目一:找出数组中重复的数字 Description 在一个长度为n的数组里的所有数字都...

网友评论

      本文标题:面试题3:数组中重复的数字

      本文链接:https://www.haomeiwen.com/subject/lydulqtx.html