题目描述:
剑指 Offer II 060. 出现频率最高的 k 个数字
给定一个整数数组 nums 和一个整数 k ,请返回其中出现频率前 k 高的元素。可以按 任意顺序 返回答案。
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
开始是简单的对每个出现的次数进行从大到小的排序,截取前k个。 提交运行的时候发现他有负数的出现,数组不能以任意数作为key存,所以我换成Map来存 key value。key可以为任意、
var topKFrequent = function(nums, k) {
let arr = new Map()
for(let i = 0 , len = nums.length;i<len;i++) {
// 初始化计数器为0
if(!arr.get(nums[i])) {
arr.set(nums[i], 0)
}
arr.set( nums[i], arr.get(nums[i])+1)
}
var arrayObj=Array.from(arr);
arrayObj.sort((a,b)=>{
return b[1]-a[1]
})
arrayObj = arrayObj.slice(0,k)
return arrayObj.map(item=>item[0])
};