zoukankan      html  css  js  c++  java
  • 常见问题之数组去重

      现在面试时候,还会时常提到数组去重问题,借着休息的这几天自己也总结一下,不求全面只求简单易懂的几个去重方法吧。

      

    Array.prototype.uniqueA = function(){
        var result = [];
        var isRepetition;
        for(var i=0; i<this.length; i++){
            isRepetition = false;
            for(var j=0; j<result.length; j++){
                if(this[i] === result[j]){
                    isRepetition = true;
                    break;
                }
            }
            if(!isRepetition){
                result.push(this[i]);
            }
        }
        return result;
    }

      第一个方法是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。

    Array.prototype.uniqueB = function(){
        var result = [];
        for(var i=0; i<this.length; i++){
            if(result.indexOf(this[i]) == -1){
                result.push(this[i]);
            }
        }
        return result;
    }

      第二个方法是比较通俗一下了,用了indexOf方法,indexOf 方法的意思是搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引,没有找到就返回 -1 。这个代码也相对的少一些,至于运行效率,这个我不清楚,应该不高。

    Array.prototype.uniqueC = function(){
        var result = [];
        for(var i=0; i<this.length; i++){
            for(var j=i+1; j<this.length; j++){
                if(this[i] === this[j]){
                    j = ++i;
                }
            }
            result.push(this[i]);
        }
        return result;
    }

    第三个方法的原理是第一层从前往后遍历原始数组,第二层循环是检测每个元素是否跟它之后的元素重复,如果它之后有重复元素则跳过它;如果这个元素之后所有元素都跟他不重复了,则把它添加到结果数组中。这个方法实现思路就是:获取无重复的最右一值添加到结果数组中,这个跟第一种方法相比也优化了第二层的循环,效率要比它高,不过这个方法的结果数组中元素的顺序跟原始数组中元素的顺序不一样了,嘻嘻 可以自己琢磨下,这个方法我也不是很理解,但是也属于精简路线。

    Array.prototype.uniqueD = function(){
        this.sort();
        var result = [this[0]];
        for(var i=1; i<this.length; i++){
            if(this[i] !== result[result.length-1]){
                result.push(this[i]);
            }
        }
        return result;
    }

    最后一个方法是先把数组进行排序,,然后再进行去重工作。好啦,整理的都是代码比较短的数组去重方法,希望能帮到你们。

  • 相关阅读:
    了解DockerFile
    容器数据卷
    Docker镜像讲解
    Java语法学习笔记:多态
    决策树之分类与回归
    python数据分析回归算法
    python之斐波那契序列算法的总结
    pandas 关于数据分组和聚合
    pandas中关于数据合并join,merge
    scrapy爬虫之断点续爬,增量爬取,断网急救
  • 原文地址:https://www.cnblogs.com/fangshidaima/p/5787710.html
Copyright © 2011-2022 走看看