题目描述
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
示例二:
输入: nums = [1], k = 1
输出: [1]
思路
- 将数组中
每个元素 以及 每个元素出现的频率记录下来 - 记录下来之后,对结果
根据元素出现的频率进行降序排序 - 取
前K个元素返回
代码
var topKFrequent = function(nums, k) {
let map=new Map(),result=[];
//将数组中的每个元素和它的频率映射在map结构中
for(let i=0;i<nums.length;i++){
if(map.has(nums[i])){
let index=map.get(nums[i]);
map.set(nums[i],++index);
}else{
map.set(nums[i],1);
}
}
// 对map结构进行排序
let myArray=Array.from(map);
myArray.sort((a,b)=>{
return b[1]-a[1];
})
// 组装最后的结果
myArray.slice(0,k).forEach((item,index)=>{
result.push(item[0])
})
// 返回结果
return result;
};