题目

点击前往

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

示例 1:

1
2
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

示例 2:

1
2
输入: nums = [1], k = 1
输出: [1]

解题思路

  • 首先利用哈希表进行频数统计;
  • 将哈希表转换成数组,利用sort函数进行排序
  • 输出排序结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* @param {number[]} nums
* @param {number} k
* @return {number[]}
*/
var topKFrequent = function(nums, k) {
if(nums.length === 1) return nums;
let hmap = new Map();
nums.forEach(v=>{
hmap.set(v,(hmap.get(v) || 0) + 1);
});
let result = Array.from(hmap).sort((a,b)=>b[1]-a[1]);
return result.slice(0,k).map(n=>n[0])
}

算法优化(小顶堆)

待定……