资讯专栏INFORMATION COLUMN

找出数组 arr 中重复出现过的元素

BDEEFE / 3466人阅读

摘要:输入输出方法二得到重复出现过的元素组成的数组数组去重一个新的临时数组方法三如果元素过大的话,方法三不好,因为会遍历很多次。

function duplicates(arr) {
    var newarr = [];
    for(var j = 0;j < arr.length;j++){
        for(var i = j+1;i < arr.length;i++){
            if(arr[j] == arr[i]){
                newarr.push(arr[i]);
                
            }
        }
    } 
    //return [...new Set(newarr)];
    return Array.from(new Set(newarr));
}

输入:
[1, 2, 4, 4, 3, 3, 1, 5, 3]
输出
[1, 3, 4]

方法二:

function duplicates(arr) {
    //得到重复出现过的元素组成的数组   
    var newarr = [];
    for(var j = 0;j < arr.length;j++){
        if(arr.indexOf(arr[j]) != j){
            newarr.push(arr[j]);
        }
    } 
    //数组去重
    var temp = []; //一个新的临时数组
    for(var i = 0; i < newarr.length; i++){
        if(temp.indexOf(newarr[i]) == -1){
            temp.push(newarr[i]);
        }
    }
    return temp;
}

方法三

https://www.nowcoder.com/questionTerminal/871a468deecf453589ea261835d6b78b
如果元素过大的话,方法三不好,因为会遍历很多次。而且如果原数组中的每一项不全是数值,得到关联数组,那么对数组b的遍历要做修改
function duplicates(arr) {
     //声明两个数组,a数组用来存放结果,b数组用来存放arr中每个元素的个数
     var a = [],b = [];
     //遍历arr,如果以arr中元素为下标的的b元素已存在,则该b元素加1,否则设置为1
     for(var i = 0; i < arr.length; i++){
         if(!b[arr[i]]){
             b[arr[i]] = 1;
             continue;
         }
         b[arr[i]]++;
     }
     //遍历b数组,将其中元素值大于1的元素下标存入a数组中
     for(var i = 0; i < b.length; i++){
         if(b[i] > 1){
             a.push(i);
         }
     }
     return a;
 }

方法四:

方法三改进后
function duplicates(arr) {
 var obj = {};
    var repeatList = [];
    //遍历数组,将数组的值作为obj的索引,出现次数为值
    arr.forEach(function(item){
        if(obj[item]){
            obj[item] +=1;
        }else{
            obj[item] = 1;
        }
    });
    //获取对象自身属性
    var propertyNames = Object.getOwnPropertyNames(obj);
    //遍历对象,将重复出现的元素取出
    propertyNames.forEach(function(item){
        if(obj[item] > 1){
            repeatList.push(parseInt(item));
        }
    });
    return repeatList;  
}

方法五:

function duplicates(arr) {
 var result = [];
    arr.forEach(function(elem){
       if(arr.indexOf(elem) !=arr.lastIndexOf(elem) && result.indexOf(elem) == -1){
           result.push(elem);
       }
    });
    return result;
}

方法六

function duplicates(arr) {
    var a=arr.sort(),b=[];
    for(var i in a){
        if(a[i]==a[i-1] && b.indexOf(a[i])==-1) b.push(a[i]); 
    }
    return b;
}//先排序,如果后一个与前一个相等且未保存,则保存。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105432.html

相关文章

  • 几个让我印象深刻的面试题(二)

    摘要:前言原文地址我的博客知乎知乎专栏简书河南前端交流群官网上次写了一篇几个让我印象深刻的面试题一没看过的同学可以去看哦。第八题请写出以下正则表达式的详细规则说明嘿嘿,正则也算我比较拿手的部分。 前言 原文地址&&我的博客知乎&&知乎专栏简书河南前端交流群官网 上次写了一篇几个让我印象深刻的面试题(一)没看过的同学可以去看哦。这次文章的题目来源:这里有超过20家的前端面试题,你确定不点进来看...

    liaorio 评论0 收藏0
  • 几个让我印象深刻的面试题(二)

    摘要:前言原文地址我的博客知乎知乎专栏简书河南前端交流群官网上次写了一篇几个让我印象深刻的面试题一没看过的同学可以去看哦。第八题请写出以下正则表达式的详细规则说明嘿嘿,正则也算我比较拿手的部分。 前言 原文地址&&我的博客知乎&&知乎专栏简书河南前端交流群官网 上次写了一篇几个让我印象深刻的面试题(一)没看过的同学可以去看哦。这次文章的题目来源:这里有超过20家的前端面试题,你确定不点进来看...

    Cobub 评论0 收藏0
  • TypeScript实现数组相关简单算法

    摘要:本文只是简单理解算法,并不会深入的讨论。大部分来自数组部分。如果数组中每个元素都不相同,则返回。示例输入输出加给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。尽量减少操作次数。 算法(algorithm),在数学(算学)和计算机科学之中,为任何良定义的具体计算步骤的一个序列,常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰...

    cloud 评论0 收藏0
  • 常见大数据和空间面试题

    摘要:答案使用,申请一个长度为类型的,每个位置只表示或,该数组占用空间约。遍历亿个数,当前数为,落在区间,对应。 过滤100亿黑名单 题目 假设有100亿个URL的黑名单,每个URL最多占用64B,设计一个过滤系统,判断某条URL是否在黑名单里。 要求 不高于万分之一的判断失误率;额外内存不超过30GB 答案 100亿个64B的URL需要640GB的内存,显然直接存哈希表不合理。考虑布隆过滤...

    Hydrogen 评论0 收藏0
  • 学习笔记: JS数组

    摘要:数组元素甚至可以是对象或其它数组。它执行的是浅拷贝,这意味着如果数组元素是对象,两个数组都指向相同的对象,对新数组中的对象修改,会在旧的数组的相同对象中反应出来。 JS中的数组是弱类型的,数组中可以含有不同类型的元素。数组元素甚至可以是对象或其它数组。JS引擎一般会优化数组,按索引访问数组常常比访问一般对象属性明显迅速。数组长度范围 from 0 to 4,294,967,295(2^...

    archieyang 评论0 收藏0

发表评论

0条评论

BDEEFE

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<