[리트코드] 350. Intersection of Two Arrays II




350. Intersection of Two Arrays II

리트코드 문제 바로가기

나의 풀이(splice)

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersect = function (nums1, nums2) {
  const ans = [];
  nums1.forEach(v => {
    if (nums2.includes(v)) {
      nums2.splice(nums2.indexOf(v), 1);
      ans.push(v);
    }
  });
  return ans;
};

console.log(intersect([1, 2, 2, 1], [2, 2]));

nums1을 순회하며 공통인 것을 구하고, 구한 값은 nums2에서 삭제하였다.



나의 풀이 (hash)

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersect = function (nums1, nums2) {
  const ans = [];
  const hash = nums1.reduce((acc, cur) => {
    acc[cur] = (acc[cur] || 0) + 1;
    return acc;
  }, {});
  nums2.forEach(v => {
    if (hash[v]) {
      ans.push(v);
      hash[v]--;
    }
  });
  return ans;
};

console.log(intersect([1, 2, 2, 1], [2, 2]));



nums1 을 hash에 저장한 뒤, nums2를 순회하며 hash를 감소하였다.