`
xiangxingchina
  • 浏览: 520134 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数组去重——一道前端校招试题

阅读更多

很多校招题是没有严格的标准答案的,只有知识点,只要几个关键点能答上来,不管程序是否真的能跑通,都可以拿分的。比如最常见的一道题:







试题:






有这样一个数组,成员都是数字,例如



var a = [1,2,3,4,5,2,3,4,6,7,8];



请实现a.distinct()方法,用来给数组a去掉重复值,要求对Array的原型进行扩展方法,并尽可能做到效率最优。






Array.prototype.distinct = function(){
    var self = this;
    var _a = this.concat().sort();
    _a.sort(function(a,b){
        if(a == b){
            var n = self.indexOf(a);
            self.splice(n,1);
        }
    });
    return self;
};


考察点:



1,考察应试者是否理解原型链



2,考察应试者是否由意识的控制算法的时间复杂度,了解应试者对专业课知识的掌握程度



3,考察应试者对js数组函数的了解程度




答案1:
Array.prototype.distinct = function(){
    var a = [],b=[],oa = this.concat();
    for(var i = 1;i<oa.length;i++){
        for(var j = 0;j<i;j++){
            if(b.indexOf(j)>-1)continue;
            if(oa[j] == oa[ i]){
                b.push(j);
            }
        }
    }
    this.splice(0,this.length);
    for(var i = 0;i<oa.length;i++){
        if(b.indexOf(i)>-1)continue;
        this.push(oa[i ]);
    }
    return this;
};

答案2:
Array.prototype.distinct = function(){
    for(var i = 0;i<this.length;i++){
        var n = this[i ];
        this.splice(i,1,null);
        if(this.indexOf(n) < 0){
            this.splice(i,1,n);//不存在重复
        }else{
            this.splice(i,1);//存在重复
        }
    }
    return this;
};
答案3:

Array.prototype.distinct = function(){
    var self = this;
    var _a = this.concat().sort();
    _a.sort(function(a,b){
        if(a == b){
            var n = self.indexOf(a);
            self.splice(n,1);
        }
    });
    return self;
};





得分点:

1,应试者起码应该自觉通过Array.prototype.distince来实现函数,若没有这样做,则扣分50%

2,应试者起码会给出答案1,得分30%,如果没有使用splice和concate,扣分20%

3,给出答案2的,得分80%,算法复杂度控制在O(n)

4,给出答案3的,得满分,算法复杂度控制在O(1)

 

分享到:
评论
1 楼 hyspace 2013-12-17  
别逗了,最后一个算法根本不是最优的,sort(function)本身的复杂度就是n*logn,所以加起来也就是2nlogn
如果是先sort之后的数组,可以一次循环就完成排重,总的时间复杂度最优是n*logn+n

相关推荐

    数组的去重、虑空

    简单的数组去重、虑空小工具。源码只是接受一个数组,把重复的,和空格去掉

    【源代码】C++算法(五)一维数组去重(复杂度为n且不新开辟空间)

    去重方法的核心在于,我们不能创建新的数组来存放去重后的元素,这意味着我们必须在原地修改数组。这通常涉及对数组元素的重新排序或者调整。一种常见的策略是使用双指针技术,一个指针(如`i`)用于遍历数组,另一...

    php数组去重和js数组去重最简方法

    本文将深入探讨这两种语言中实现数组去重的最简洁方法。 首先,让我们关注PHP的二维数组去重。在PHP中,数组去重通常涉及`array_unique`函数,但这个函数适用于一维数组,对于二维数组,我们需要自定义方法。一种...

    JavaScript数组去重功能的设计与实现.pdf

    JavaScript数组去重功能的设计与实现 本文主要讨论了JavaScript数组去重功能的设计与实现,以解决在数据处理过程中产生大量重复数据的问题。文章首先介绍了JavaScript的基本概念,包括ECMAScript、DOM、BOM三个部分...

    一个数组去重的小程序

    这是一个简单的小程序,主要解决的是去除数组中的重复元素并输出去除重复元素并排序后的数组。

    JavaScript Array数组去重源码下载

    JavaScript Array数组去重源码下载

    PHP实现的多维数组去重操作示例

    本文实例讲述了PHP实现的多维数组去重操作。分享给大家供大家参考,具体如下: 最近用到了一个获取历史会议列表的问题,需要去这个多维数组去重后返回返回给客户端,这里使用了几个php的组装函数,分享下,示例代码...

    C#合并一维字符串数组并去重

    在处理数据时,我们经常需要对一维数组进行操作,例如合并和去重。本文将深入探讨如何在C#中实现这些功能,以及一些可能遇到的挑战和解决策略。 首先,让我们来看看如何合并一维字符串数组。在C#中,我们可以使用`...

    前端基础数组、对象数组去重demo

    前端基础数组、对象数组去重demo

    高性能js数组去重(12种方法,史上最全)

    在真实的项目中碰到的数组去重,一般都是后台去处理,很少让前端处理数组去重。虽然日常项目用到的概率比较低,但还是需要了解一下,以防面试的时候可能回被问到。 注:写的匆忙,加上这几天有点忙,还没有非常认真...

    JavaScript数组去重的方法总结【12种方法,号称史上最全】

    在真实的项目中碰到的数组去重,一般都是后台去处理,很少让前端处理数组去重。虽然日常项目用到的概率比较低,但还是需要了解一下,以防面试的时候可能回被问到。 注:写的匆忙,加上这几天有点忙,还没有非常认真...

    vue中对象数组去重的实现

    在Vue项目中,我们经常需要处理对象数组的去重问题,尤其是当数组中存储的是对象时,不能直接使用JavaScript原生的`new Set()`方法去重,因为`new Set()`只适用于简单数据类型的元素,对于对象这样的复杂数据类型,...

    javascript实现数组去重的多种方法_.docx

    javascript 实现数组去重的多种方法_ javascript 实现数组去重的多种方法是指使用javascript 语言实现数组去重的多种方法。数组去重是指将数组中重复的元素删除,得到一个没有重复元素的新数组。下面将介绍多种实现...

    JS实现数组去重方法总结(六种方法)

    标题中提到的是“JS实现数组去重方法总结”,描述中说明了文章将介绍六种方法,并提到了合并数组并去重的方法。文章内容介绍了六种不同的JavaScript数组去重方法,下面对这些方法的知识点进行详细说明。 方法一:...

    数组应用——一维数组排序

    数组应用——一维数组排序; 定义一组无序的整型数列,共10个数值,经过一定的处理,使该数组由大到小排列,并输出到屏幕上。具体要求如下: 定义int型数组arrayorder并赋初值为0,长度为10,以承载该数列; 使用...

    javascript实现数组去重的方法

    数组去重是面试中经常被问到的热点问题,数组去重的方法有很多,下面谈谈个人理解。 概括 数组去重是一个比较常见的算法考察点,实现去重的方式无非就是唯一性或者非唯一性,简而言之,就是选出唯一的或者去掉不唯一...

    数组去重Java工具类

    数组去重Java工具类

    数组去重与数组扁平化.md

    数组去重与数组扁平化.md

    jquery删除数组中重复元素

    话不多说,下面就跟着小编来看下利用jquery实现删除数组中重复元素的具体思路吧 首先定义如下数组: var arr=[0,2,3,5,6,9,2]; 我们可以看到数组中存在重复元素’2′; 最后通过jquery筛选应该得到[0,2,3,5,6,9]; ok...

    08-数组去重.html

    08-数组去重

Global site tag (gtag.js) - Google Analytics