347. 前 K 个高频元素(中)
题目
- 给你一个整数数组 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;//当前处理过的桶赋0
k--;//找下一个
}
return res
};
浙公网安备 33010602011771号