이 주제에 대해 많이 읽었으며 많은 알고리즘을 보았습니다. 다른 알고리즘에 비하면 효율을 이해하는 데 어려움을 겪는 다른 솔루션을 우연히 발견했습니다. 간단한 임시 객체를 사용하여 배열의 기존 요소를 보유하고 있기 때문입니다. 정교한 정렬 방법과 비교를 사용하는 "구식"방법과 비교할 때 유효한 해결책입니까?JavaScript - 중복 알고리즘 효율성 제거
function removeDup(arr){
var element,
existObj= {},
finalArr = [];
for(var i=0;i<arr.length;i++){
element = arr[i];
if(!existObj[element]){
finalArr.push(element);
existObj[element] = true;
}
}
return finalArr;
}
//console.log(removeDup([2,2,2,2,4534,5,7,3]));
console.log(removeDup(["mike","john","alex","mike","john"]));
친구는 임시 개체가 실제로 구현 된 방법을 알고 있기 때문에 효율성을 명확히 결정할 수 없다고 말했습니다.
'existObj'를 해시 맵으로 생각해보십시오 - 할당 및 액세스를위한'O (1)'성능에 가깝습니다. – Bergi
** [Array.filter] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)를 사용하면 더 쉬워집니다 ** – Prateek
@Bergi : 네 말이 맞아. , 그리고 O (1) + 상수 === 0 (1) 이후로, 우리는 룩업을위한 '거의'O (1)이 아니라 정확히 O (1)을 가진다. 따라서이 알고리즘은 O (n)입니다. 자, 내 대답에서 볼 수 있듯이, 우리는 최적의 네이티브 객체를 사용하여이 O (n)의 'k'에 대해 6-10X 향상을 얻을 수 있습니다. – GameAlchemist