javascript數組查重

題目描述

找出數組 arr 中重複出現過的元素
示例1
輸入: [1, 2, 4, 4, 3, 3, 1, 5, 3];
輸出: [1, 3, 4];

方法一:先排序後查重:

function duplicates(arr) {
  var newArr = arr.sort();
  var result = [];
  for (var i = 0; i < newArr.length; i++){
      if (newArr[i] == newArr[i+1] && newArr[i]!= newArr[i-1]){
          result.push(newArr[i]);
      }
  }
    return result;
}
var a = [1,1,2,3,5,3];
var b = duplicates(a);
console.log(b);// 1,3


對象引索法:

鏈接:https://www.nowcoder.com/questionTerminal/871a468deecf453589ea261835d6b78b
來源:牛客網

/* 時間複雜度爲O(n)算法。
思路:遍歷數組,將數組的元素和數組出現的次數分別作爲對象屬性和值。遍歷對象,取出
次數大於1的即可。 */
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; 
}


hash表的算法:


function duplicates(arr) {
    var hash = {},ret ={};
    for (var i =0; i < arr.length; i++) {
        hash[arr[i]] ? ret[arr[i]] = 1 : hash[arr[i]] = 1
    }
    return Object.keys(ret)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章