1.哈希记录元素出现次数
2.放入优先队列(最大堆)
3.依次出队获取结果
public class Solution {
public int[] TopKFrequent(int[] nums, int k) {
// 收集元素次数
Dictionary<int,int> dic = new();
for(int i = 0; i < nums.Length; i++)
{
if(!dic.TryAdd(nums[i], 1))
{
dic[nums[i]]++;
}
}
// 进入优先队列, 默认为最小堆
PriorityQueue<int, int> que = new();
foreach((var key, var times) in dic)
{
// 优先级越小的,越靠近队头
// 这里 使用数组的长度 减去 这个数出现的次数,即可保证,出现次数越大的元素越靠近队头
que.Enqueue(key, nums.Length - times);
}
// 依次出队列
int[] ans = new int[k];
for(int i = 0; i < k; i++)
{
ans[i] = que.Dequeue();
}
return ans;
}
}