题目描述
找出数组 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)
}