首页 > 试题广场 >

查找重复元素

[编程题]查找重复元素
  • 热度指数:148506 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
找出数组 arr 中重复出现过的元素(不用考虑返回顺序)
示例1

输入

[1, 2, 4, 4, 3, 3, 1, 5, 3]

输出

[1, 3, 4]
推荐
将传入的数组arr中的每一个元素value当作另外一个新数组b的key,然后遍历arr去访问b[value],若b[value]不存在,则将b[value]设置为1,若b[value]存在,则将其加1。可以想象,若arr中数组没有重复的元素,则b数组中所有元素均为1;若arr数组中存在重复的元素,则在第二次访问该b[value]时,b[value]会加1,其值就为2了。最后遍历b数组,将其值大于1的元素的key存入另一个数组a中,就得到了arr中重复的元素。
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;
 }

编辑于 2015-08-18 21:19:47 回复(59)
       let arr1[]
        function duplicates(arr) {
         for(i=0;i<arr.length;i++)
          {
            for(m=1;m<arr.lengrh;m++)
            {
                if arr[i]=arr[m]
                 arr1[]=arr[i]
                 return arr1[]
             

}      
   }
}
//不知道这个思路错哪了

编辑于 2023-12-13 17:07:38 回复(0)
function duplicates(arr) {
    const num={}
    for(const v of arr){
        if(v in num){
            num[v]++
        }else{
            num[v]=1
        }
    }
    const res=[]
    for(const i in num){
        if(num[i]>1){
            res.push(i)
        }
    }
    return res;
}

发表于 2023-06-04 17:24:18 回复(0)
function duplicates(arr) {
    let arr2=new Array()
    for(let i=0;i<arr.length;i++){
        if((i!==arr.lastIndexOf(arr[i]))  &&   (arr2.indexOf(arr[i])==-1))
        {
            arr2.push(arr[i])
        }
    }   
    return arr2
}

发表于 2023-05-11 20:54:31 回复(0)
function duplicates(arr) {
         let set=new Set()
         size=set.size
         let ar=[]      
        for(i=0;i<arr.length;i++){
          set.add(arr[i])
          if(size==set.size){
          ar.push(arr[i])
          }
          size=set.size
        }
        return Array.from( new Set(ar) )
}
发表于 2023-04-12 17:25:41 回复(0)
function duplicates(arr) {
    let a = []
    arr.forEach((item,index)=>{
        if(arr.indexOf(item)!==index){
            a.push(item)
        }
    })
    return[...newSet(a)]
}
发表于 2023-04-10 16:58:13 回复(0)
function duplicates(arr) {
    let news=[]
    for (let i=0;i<arr.length;i++)
        {
            for (let j=i+1;j<arr.length;j++)
                {
                    if(arr[i]===arr[j])
                        {
                            news.push(arr[i])
                        }
                }
        }
    for (let i=0;i<news.length;i++)
        {
            for (let j=i+1;j<news.length;j++)
                {
                    if(news[i]===news[j])
                        {
                            news.splice(i,1)
                            i=i-1
                        }
                }
        }
        return news
}   
let str=duplicates([1,1,2,2,3,4,4,5,6])
console.log(str)
发表于 2023-03-24 09:31:04 回复(1)
function duplicates(arr) {
    return [...new Set(arr.filter(item => arr.indexOf(item) !== arr.lastIndexOf(item)))]
}

发表于 2023-03-11 23:24:00 回复(0)
function duplicates(arr) {
    return [... new Set(arr.filter(x => arr.indexOf(x) !== arr.lastIndexOf(x)))]
}
发表于 2023-03-06 18:37:24 回复(0)
function duplicates(arr) {
        let newArr = []
        arr.filter((item,index)=>{
          if(arr.indexOf(item) != arr.lastIndexOf(item)){
            newArr.push(item)
          }
        })
        return [...new Set(newArr)]
}


发表于 2023-03-04 01:34:49 回复(0)
 return [...new Set(arr.filter(x=>{
        return arr.indexOf(x)!=arr.lastIndexOf(x)
    }))]

发表于 2023-02-21 14:27:21 回复(0)
function duplicates(arr) {
    arr.sort((a, b) => a - b)
    const newArr = []
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] === arr[i - 1]) newArr.push(arr[i])
    }
    return Array.from(new Set(newArr))
}

发表于 2023-02-07 14:52:31 回复(0)
function duplicates(arr) {
     const dupArr = arr.filter((item,index) => { 
         //拷贝原数组
         let newArr = [].concat(arr)
        //除去当前item项,
         newArr.splice(index,1)
        //数组剩余部分是否还有该item项
         return newArr.includes(item)
     })
    //会将所有重复项返回,通过set去重
     return [...new Set(dupArr)]
}
发表于 2023-01-31 10:44:33 回复(0)
function duplicates(arr) {
  return arr.reduce((v, t, i, o) => {
        if (o.slice(i+1).includes(t) && !v.includes(t)) v.push(t);
        return v
      }, [])
}

发表于 2022-12-06 14:50:35 回复(0)
function duplicates(arr) {
    let set = new Set();
            let newArr=[]
            arr.forEach(element => {
                if(set.has(element)&&newArr.indexOf(element)==-1){
                    newArr.push(element)
                }else{
                    set.add(element)
                }
            });
            return newArr;
}

发表于 2022-11-26 00:19:44 回复(0)
function duplicates(arr) {
    const set = new Set();
    while(arr.length) {
        const cap = arr.shift();
        if(arr.includes(cap)) set.add(cap);
    }
    return Array.from(set);
}
发表于 2022-11-17 09:33:16 回复(0)
通过对象保存每个值的出现次数,然后遍历对象返回value不为1的key
function duplicates(arr) {
    const objContainer = {}
    const output = []
    for (el of arr){
        if (objContainer[el]){
            objContainer[el] += 1
        }else{
            objContainer[el] = 1
        }
    }
    for(let i in objContainer){
        if(objContainer[i] !== 1){
            output.push(+i)
        }
    }
    return output
}

发表于 2022-11-15 20:56:59 回复(0)
let newarr = new Set()
for(i=0;i<arr.length;i++){
    for(j=i+1;j<arr.length;j++){
        if(arr[i]===arr[j]){
            newarr.add(arr[i])
        }
    }
}
return Array.from(newarr)
发表于 2022-11-15 18:05:59 回复(0)
为什么自己在编译器是1 3 4 交代码的时候未通过,说我实际输出null

function duplicates(arr) {
            var newArr = [];
            for (var i = 0; i < arr.length; i++) {
                var first = arr.findIndex(element => element == arr[i]);
                var last = arr.findLastIndex(element => element == arr[i]);
                if (first != last) {
                    if (!newArr.includes(arr[first])) {
                        newArr.push(arr[first]);
                    }
                }
            }
            return newArr;
        }
发表于 2022-10-30 11:57:08 回复(0)
        function duplicates(arr) {

            return [...new Set(arr.filter((item) => {
                return arr.lastIndexOf(item) !== arr.indexOf(item)
            }))]
        }
        let res = duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]);
        console.log(res)

发表于 2022-10-29 14:19:36 回复(0)
// 方法1
function duplicates(arr) {
    let a = [],b = [];
    arr.map((element,index)=>{
        if(a.includes(element)){
            b.includes(element)?'':b.push(element)
        }else{
            a.push(element)
        }
    })
    return b
}
// 方法 2
/**function duplicates(arr) {
    let newArr = [];
    newArr = arr.filter((element,index)=>{
        let _index = arr.findIndex((el,ind)=>{
                return el==element
            });
         return _index!==index&&(arr[_index]==element)
    })
    return Array.from(new Set(newArr));
}**/

发表于 2022-10-29 12:00:40 回复(0)