/*
 * @lc app=leetcode.cn id=350 lang=javascript
 *
 * [350] 两个数组的交集 II
 */

// @lc code=start
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersect = function (nums1, nums2) {
  const hash = new Map()
  const ans = []
  for (let i = 0; i < nums1.length; i++) {
    const cur = nums1[i];
    hash.set(cur, (hash.get(cur) || 0) + 1);
  }

  for (let j = 0; j < nums2.length; j++) {
    const cur = nums2[j];
    const val = hash.get(cur);
    if (val === 1) {
      hash.delete(cur);
      ans.push(cur);
    } else if (val > 1) {
      hash.set(cur, val - 1);
      ans.push(cur);
    }
  }
  return ans;
};
// @lc code=end