347. 前 K 个高频元素
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
时间复杂度好像没满足,js 写优先队列太复杂了,等等看
思路
先map一下,算出各个数的频率
然后根据频率降序排列 最后选出前k个
var topKFrequent = function (nums, k) {
let res = [];
const map = new Map();
for (const num of nums) {
map.set(num, (map.get(num) || 0) + 1);
}
// 回一个数组的迭代对象,该对象包含数组的键值对(key,value)
// 按照频率降序排列
let sortedArray = [...map.entries()].sort((a, b) => b[1] - a[1]);
for (let i = 0; i < k; i++) {
res.push(sortedArray[i][0]);
}
return res;
};
链式写法:
var topKFrequent = function (nums, k) {
let res = [];
const map = new Map();
nums.forEach(num => map.set(num, (map.get(num) || 0) + 1));
return [...map.entries()]
.sort((a, b) => b[1] - a[1])
.map(x => x[0])
.slice(0, k);
}