zoukankan      html  css  js  c++  java
  • 一道腾讯前端试题 查找指定个数数字里面丢失的数字

    对于没参加过互联网企业招聘,或是没有参加过大型互联网企业招聘的人来说,能以这些公司的面试题做为锻炼,无疑是一种非常好的学习和进步的途径。下面是一道腾讯的前端面试题(JS解答),题目本身在现实中意义不大,主要是考察应试者对js及算法的理解程度,本文给出了三种答案,期待有更大的侠来一试身手,做出更好的解答。

    题目:有一组数字,从1到n(假设n=10000),从中任意删除了3个数,顺序也被打乱,剩余数字放在一个n-3的数组里,请找出丢失的数字,要求算法比较快。

    方法一,(我写的程序):

    复制代码
    var ary = [1, 5, 7, 6, 4, 8, 10];
    var n = ary.length + 3;
    var newAry = [];
    document.write("假设n=" + n + "<br/>");
    
    ary.sort(function(a, b){
        return a - b;
    });
    document.write("初始数组:" + ary + "<br/>");
    for(var i = 1, j=0; i <= n; i ++,j++){
        var diff = ary[j] - i;
        if(!ary[j]){
              newAry.push(i);
        } else if(diff > 0){
            for(var k = 0; k < diff; k ++){
              newAry.push(i++);    
            }
        }
    }
    
    //alert(newAry);
    document.writeln("缺少的数:" + newAry);
    复制代码

    方法一 DEMO: http://www.threesnow.com/code/094/method_01.html

    下面是另外两位工程师给出的答案(本文的最后会给出一位网友对三种实现的效果测试对比)

    方法二,

    复制代码
    var  n = 10;
    var oldArr = [5,1,6,3,7,8,10];//缺失的源数组997个数;
    var newArr = Array(11);
    var lostArr = [];//要找的数的数组
    for(var i = 0; i < n-3; i++) {
        newArr[oldArr[i]] = 1;
    }
    for(var j = 0; j < newArr.length; j++) {
        if(!newArr[j]) {
            lostArr.push(j);
        }
    }
    lostArr.shift(0);
    alert(lostArr);
    复制代码

    方法二 DEMO:http://www.clearthem.com/code/094/method_02.html

    方法三,

    复制代码
    var num = [2,1,3,5,4,6,7,9,10,11,12,14,15,17,18,19,20,22,23,21];
    num = num.sort(function(a,b){return a-b});
    var y={};
    for(var i=0;i<num.length;i++){
        y[num[i]] = num[i];
    }
    
    var m=1;
    var k=[];
    while(m<=23){
        if(!(m in y)){
            k.push(m);
        }
        m++;
    }
    alert(k);
    复制代码

    方法三 DEMO: http://www.clearthem.com/code/094/method_03.html

    有位网友对上面三种方法进行了运算时间的测试(为了测试效果明显,他将数据量增加到了十万条),测试效果如下:

    方法一,200ms左右;
    方法二,70ms左右;
    方法三,260ms左右。

    具体什么样,我自己并没有测试,不过以这位网友提供的结果来看,我的答案还不是最差的,呵呵~~

    期待大家的改正和更好的答案,

  • 相关阅读:
    leetcode 350. Intersection of Two Arrays II
    leetcode 278. First Bad Version
    leetcode 34. Find First and Last Position of Element in Sorted Array
    leetcode 54. Spiral Matrix
    leetcode 59. Spiral Matrix II
    leetcode 44. Wildcard Matching
    leetcode 10. Regular Expression Matching(正则表达式匹配)
    leetcode 174. Dungeon Game (地下城游戏)
    leetcode 36. Valid Sudoku
    Angular Elements
  • 原文地址:https://www.cnblogs.com/wei2yi/p/3248305.html
Copyright © 2011-2022 走看看