λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸƒ algorithm/leetcode

LeetCode 347 - Top K Frequent Elements (Medium)

by HandHand 2021. 3. 3.

문제

LeetCode - 347번

풀이 κ³Όμ •

λ°°μ—΄μ—μ„œ κ°€μž₯ 많이 λ“±μž₯ν•˜λŠ” k 개의 숫자λ₯Ό μ°Ύμ•„ λ°˜ν™˜ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό O(NlogN) 으둜 지정해놨기 λ•Œλ¬Έμ— Hash Map 을 μ‚¬μš©ν•΄μ„œ λΉˆλ„μˆ˜λ₯Ό μ €μž₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μš°μ„  λ°°μ—΄μ˜ 각 μš”μ†Œλ₯Ό μˆœνšŒν•˜λ©° Map 에 λΉˆλ„μˆ˜λ₯Ό μ €μž₯ν•˜λŠ”λ°μ—λŠ” O(N) 의 μ‹œκ°„ λ³΅μž‘λ„κ°€ λ“€κ³ ,
이후 λΉˆλ„μˆ˜λ₯Ό κΈ°μ€€μœΌλ‘œ Map 을 μ •λ ¬ν•˜λ©΄ O(NlogN) 의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό μ–»κ²Œ λ©λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ μ •λ ¬ κ²°κ³Ό k 개의 μƒμœ„ μš”μ†Œλ“€μ„ λ°˜ν™˜ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

μ½”λ“œ

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
var topKFrequent = function (nums, k) {
  const numberCount = new Map();

  nums.forEach((num) => {
    if (numberCount.has(num)) {
      numberCount.set(num, numberCount.get(num) + 1);
    } else {
      numberCount.set(num, 1);
    }
  });

  const sorted = [...numberCount.entries()].sort((a, b) => b[1] - a[1]);

  const answer = [];
  for (let i = 0; i < k; i++) {
    answer.push(sorted[i][0]);
  }

  return answer;
};
λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€