前K个高频元素

「前 K 个高频元素」问题的解决方案,采用桶排序思想,主要分为三个步骤:

  1. 统计频率:遍历数组,使用 Map 统计每个元素的出现次数,并记录最大出现次数。
  2. 构建桶:根据最大出现次数创建桶数组,将相同频率的元素放入同一个桶中。
  3. 收集结果:从高频到低频遍历桶,收集元素直到获得前 K 个高频元素。

时间复杂度为 O(n),空间复杂度为 O(n),

javascript 复制代码
var topKFrequent = function (nums, k) {
  // 第一步:统计每个元素的出现次数
  const cnt = new Map()
  for (const x of nums) {
    cnt.set(x, (cnt.get(x) ?? 0) + 1)
  }
  const maxCnt = Math.max(...cnt.values())

  // 第二步:把出现次数相同的元素,放到同一个桶中
  const buckets = Array.from({ length: maxCnt + 1 }, () => [])
  for (const [x, c] of cnt.entries()) {
    buckets[c].push(x)
  }

  // 第三步:倒序遍历 buckets,把出现次数前 k 大的元素加入答案
  const ans = []
  // 注意题目保证答案唯一,一定会出现某次 push 后 ans.length 恰好等于 k 的情况
  for (let i = maxCnt; ans.length < k; i--) {
    ans.push(...buckets[i])
  }
  return ans
}

console.log(topKFrequent([1, 1, 1, 2, 2, 3], 2))
相关推荐
AlienZHOU3 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
Captaincc7 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
君顾17 小时前
上海24小时自助健身房系统开发实战指南:从架构设计到落地部署
java·开发语言·健身房
香菜TTT8 小时前
大模型上下文协议(MCP):AI 应用的“USB-C”接口技术
开发语言·人工智能·经验分享
aramae8 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
计算机魔术师8 小时前
德国Wiki被黑后两周,OpenAI终于把模型失控的账本摊开了
前端
kyriewen9 小时前
我让 AI 当面试官面了我一轮:第 3 个追问我就卡住了(附 10 道追问清单)
前端·面试·ai编程
jimy19 小时前
readelf 查看“派生类”的vtable符号
开发语言·c++
IT_陈寒9 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
前端snow9 小时前
ai agent --- 多agent框架之图编排引擎-langgraph
前端