Sorting Problem

Top K Frequent Elements

Problem

Given an integer array and a number k, find the k most frequent elements in the array.

Example

{
"arr": [1, 2, 3, 2, 4, 3, 1],
"k": 2
}

Output:

[3, 1]

Solution

function mostFrequentWord(arr, k) {

  const freq = new Map();
  let result = [];
  let n = arr.length;

  for (let i = 0; i < n; i++) {

    let x = 0;
    if (freq.has(arr[i]) == true) {
      x = freq.get(arr[i]);
    }
    freq.set(words[i], x + 1);
  }

  let freqWordsSorted = new Map([...freq.entries()].sort((a, b) => b[1] - a[1]));

  for (let [key, value] of freqWordsSorted) {
    result.push(key);
    k--;
    if(!k) {
      break;
    }
  }

  console.log(result);
}

// given set of keys
let arr = [1, 2, 3, 2, 4, 3, 1];
let n = 2;

mostFrequentWord(arr, n);