347. 前 K 个高频元素
给你一个整数数组 nums
和一个整数 k
,请你返回其中出现频率前 k
高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
解题思路
这道题需要求前 k 个元素,那么自然而言使用优先队列解题。
function topKFrequent(nums: number[], k: number): number[] {
// 定义一个map,key存放数字,value存放出现次数
const map: Map<number, number> = new Map();
// 统计出现次数
for (const n of nums) {
// key不存在,则为0
map.set(n, (map.get(n) || 0) + 1);
}
// TS没有最小堆的数据结构,所以直接对整个数组进行排序,取前k个元素
return [...map.entries()]
.sort((a, b) => b[1] - a[1])
.slice(0, k)
.map((i) => i[0]);
}