5. Given an array
nums = [5,3,1,1,1,3,73,1] and
k = 2, which approach correctly returns the top K frequent elements using a min-heap? Choose the best code snippet.
A:
const freqMap = new Map();
for (const n of nums) freqMap.set(n, (freqMap.get(n) || 0) + 1);
const heap = [];
for (const [num, freq] of freqMap.entries()) {
heap.push([num, freq]);
heap.sort((a,b) => a[1] - b[1]);
if (heap.length > k) heap.shift();
}
return heap.map(x => x[0]);
B:
const freqMap = {};
for (const n of nums) freqMap[n] = freqMap[n] + 1;
const heap = new MinPriorityQueue({ priority: x => x[1] });
for (const [num, freq] of Object.entries(freqMap)) {
heap.enqueue([num, freq]);
if (heap.size() > k) heap.dequeue();
}
const result = [];
while (!heap.isEmpty()) result.push(heap.dequeue()[0]);
return result;
C:
const freqMap = new Map();
for (const n of nums) freqMap.set(n, freqMap.get(n) + 1);
const heap = [];
for (const [num, freq] of freqMap.entries()) {
heap.push([num, freq]);
heap.sort((a,b) => b[1] - a[1]);
if (heap.length > k) heap.pop();
}
return heap.map(x => x[0]);
D:
const freqMap = new Map();
for (const n of nums) freqMap.set(n, (freqMap.get(n) || 0) + 1);
const heap = new MaxPriorityQueue({ priority: x => x[1] });
for (const [num, freq] of freqMap.entries()) {
heap.enqueue([num, freq]);
if (heap.size() > k) heap.dequeue();
}
const result = [];
while (!heap.isEmpty()) result.push(heap.dequeue()[0]);
return result;