medium
Top K Frequent Elements
Link to algo
To find the k most frequent elements in an integer array using JavaScript, you can follow these steps:
-
Initialize an empty object frequency to store the frequency count.
-
Iterate over each element n in the nums array. If the element n already exists in the frequency object, increment its count by 1. If the element n doesn't exist in the frequency object, set its count to 1.
-
Obtain the keys (elements) from the frequency object using Object.keys().
-
Sort the keys in descending order based on their corresponding frequency count. This is achieved by providing a custom sort function that compares the frequency count of each key (a and b) using frequency[b] - frequency[a].
-
Slice the sorted keys to return only the first k elements.
Return the resulting array of the top k frequent elements.
/**
* @param {number[]} nums
* @param {number} k
* @return {number[]}
*/
var topKFrequent = function (nums, k) {
const frequency = {};
for (let n of nums) {
frequency[n] = frequency[n] + 1 || 1;
}
const sortedFrequency = Object.keys(frequency).sort(
(a, b) => frequency[b] - frequency[a]
);
return sortedFrequency.slice(0, k);
};
The time complexity of this solution depends on the size of the nums array. Iterating over the nums array to calculate the frequency: O(n) Obtaining the keys from the frequency object: O(m) Sorting the keys based on frequency: O(m log m) Slicing the sorted keys: O(k) Overall, the time complexity is determined by the largest operation, which is sorting the keys. Therefore, the simplified time complexity is O(m log m), where m represents the number of unique elements in the nums array.
If all elements in the nums array are unique, m will be equal to the length of the nums array (n), resulting in a time complexity of O(n log n).
the space complexity of the given solution is O(m), where m is the number of unique elements in the nums array.