目录
- 题目
- 题解:桶排
题目
- 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
题解:桶排
var topKFrequent = function(nums, k) {const res=[] //存结果const maxNums = Math.max(...nums);//找到数组中最大值const minNums = Math.min(...nums);//找到数组中最小值const range = maxNums-minNums+1;//计算范围let b = new Array(range).fill(0);//创建桶for(let num of nums){//往桶放旗子:每个数字出现的次数b[num-minNums]++//索引为num-minNums->处理负数} while(k>0){//找到前k个高频元素let a=Math.max(...b);//当前最高频const index = b.indexOf(a)//索引即为原来的元素res.push(index+minNums);//加入结果数组b[index]=0;//当前处理过的桶赋0k--;//找下一个}return res
};