題目描述
找出數組 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)
}