• 一道腾讯前端试题 查找指定个数数字里面丢失的数字


    对于没参加过互联网企业招聘,或是没有参加过大型互联网企业招聘的人来说,能以这些公司的面试题做为锻炼,无疑是一种非常好的学习和进步的途径。下面是一道腾讯的前端面试题(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左右。

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

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

  • 相关阅读:
    jdbc preparedstatement 调用存储过程的问题
    httpclient 优化
    httpclient 4种关闭连接
    Cloudstack介绍(一)
    Docker registry私有仓库(七)
    Docker生产实践(六)
    python装饰器
    Docker镜像构建(五)
    python 生成器和迭代器介绍
    Docker数据管理(四)
  • 原文地址:https://www.cnblogs.com/wei2yi/p/3248305.html
Copyright © 2020-2023  润新知