>

면접에서 반복적 인 요소를 찾아 달라는 요청을 받았습니다. for 루프를 사용하는 것을 발견했지만 인터뷰 담당자는 for for 루프를 사용하여 성능에 영향을 줄 수있는 더 나은 방법을 요청했습니다. Java 스크립트를 탐색하는 초보자입니다. 배열에서 반복 요소를 찾는 다른 방법을 찾는 데 도움이 될 수 있습니까? 아래는 답변에 대한 코드입니다.

var a = [1,2,3,3,4,4,5,5,6,7,8,8,9,10,11,12];
var repeatElements = [];
for (var i=0;i<a.length;i++){
 for(var j=1+i; j<a.length;j++){
 if (a[i]===a[j]){
repeatElements.push(a[i]);
}
}
}
console.log(repeatElements);

이 스택 오버플로 질문 자바 스크립트 배열에서 모든 고유 한 값 가져 오기 (중복 제거) 반복 검색에 필터를 사용하는 것이 더 효율적인 방법입니까?


  • 답변 # 1

    선형 시간에이를 수행하는 좋은 방법은 빈도 표를 사용하는 것입니다 :

    var a = [1,2,3,3,4,4,5,5,6,7,8,8,9,10,11,12];
    var frequencyTable = {};
    var repeatElements = [];
    for (var i=0; i<a.length; i++){
     if (frequencyTable[a[i]]){
      frequencyTable[a[i]]++;
      repeatElements.push(a[i]);
     } else {
      frequencyTable[a[i]] = 1;
     }
    }
    console.log(repeatElements);
    
    

    이 방법은 배열을 한 번만 반복합니다.

  • 답변 # 2

    귀하의 솔루션에는 O(n^2) 가 있습니다  복잡성. 면접관이 당신이 O(n) 를 제공하길 기대했다고 생각합니다  솔루션, 반복 항목의 사전 사용. 다음과 같이 보입니다 :

    const a = [1,2,3,3,4,4,5,5,6,7,8,8,9,10,11,12];
    function getRepetitives(arr) {
      const itemsDuplicates = {}
      
      arr.forEach(item => {
        itemsDuplicates[item] = itemsDuplicates.hasOwnProperty(item) 
          ? itemsDuplicates[item] + 1
          : 1 
      })
      
      const repetitives = Object.entries(itemsDuplicates).filter(([ k ,v ]) => v > 1).map(([k]) => k)
      
      return repetitives
    }
    console.log(getRepetitives(a))
    
    

관련 자료

  • 이전 multithreading - 스레드 내에서 실행중인 두 객체가 Java로 통신하도록하려면 어떻게해야합니까?
  • 다음 javascript - 드롭 다운에서 특정 값이 선택된 경우 다른 드롭 다운이 표시됩니다