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
};
posted @ 2025-03-15 09:28  Frommoon  阅读(12)  评论(0)    收藏  举报