[알고리즘] 442. Find All Duplicates in an Array

프최's log·2020년 12월 28일
0

study

목록 보기
56/59

문제구현

난이도 : medium

Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
Find all the elements that appear twice in this array.
Could you do it without extra space and in O(n) runtime?

알고리즘

  1. 빈 객체 안에 배열의 요소를 key로 넣어 카운팅을 한다.
    1-1. key 가 존재하면 +1
    1-2. key 가 없으면 1 을 넣는다.
  2. 2이상인 key만 배열에 담아 결과를 반환한다.

풀이

var findDuplicates = function(nums) {

  let resultArr = [];
  let resultObj = {};
  
  for(let i=0; i < nums.length; i++){
    if ( nums[i] in resultObj ) {
      resultObj[nums[i]]++;
    } else {
      resultObj[nums[i]] = 1;
    }
  }
  
  for (let key in resultObj){
    if(resultObj[key] === 2){
      resultArr.push(key);
    }
  }

  return resultArr;
};

다른사람 풀이

new Set을 객체로 활용해서 풀어낸 방식 ..감탄쓰

var findDuplicates = function(nums) {
    const set = new Set(nums);
    nums.forEach(n => {
        if (set.has(n)) {
            set.delete(n);
        } else {
            set.add(n);
        }
    })
    return Array.from(set);
};
profile
차곡차곡 쌓아가는 나의 개발 기록

0개의 댓글