
Leetcode Problem 347: Top K Frequent Elements
Given an integer array nums and an integer k, find and return the k
elements that appear most frequently in the array. The answer is guaranteed to
be unique (no ambiguity for the k-th slot) and can be returned in any order.
Constraints:
k is between 1 and the number of distinct elements in the array.k-th most frequent element.Follow up: Your algorithm's time complexity must be better than O(n log n).
nums = [1, 1, 1, 2, 2, 3], k = 2
Frequency count: Top k=2 most frequent:
1 → ███ (3 times) [1, 2]
2 → ██ (2 times)
3 → █ (1 time)
import { Heap } from "../heap"
function topKFrequent(nums: number[], k: number): number[] {
const kFrequentElements = new Heap<{ element: number, frequency: number}>(
(a, b) => a.frequency - b.frequency
)
const frequencies = new Map<number, number>()
for (const num of nums) {
frequencies.set(num, (frequencies.get(num) || 0) + 1)
}
for (const [element, frequency] of frequencies) {
kFrequentElements.insert({ element, frequency })
if (kFrequentElements.size() > k) {
kFrequentElements.extract()
}
}
const result: number[] = []
while (kFrequentElements.size() > 0) {
result.push(kFrequentElements.extract()!.element)
}
return result
}
console.log(topKFrequent([1,2,1,2,1,2,3,1,3,2], 2)) // Output: [1,2]