算法

Most Common Elements

从数组中找出出现频率最高的 k 个数字,返回这 k 个数字即可,顺序不要求。

简单排序

时间复杂度:O(nlogn)O(n log n)

思路

  • 使用 Map 或 Record 统计每个数字出现的次数。
  • 将 Map 或 Record 转换成数组并按照出现次数从大到小排序。
  • 取前 k 个键即可。

代码

function topKFrequent(numbers: number[], k: number): number[] {
  const freq = new Map<number, number>();

  // 统计频率
  for (const n of numbers) {
    freq.set(n, (freq.get(n) || 0) + 1);
  }

  // 转化为数组 [num, count]
  const arr = [...freq.entries()];

  // 按照出现次数从大到小排序
  arr.sort((a, b) => b[1] - a[1]);

  // 取前 k 个
  return arr.slice(0, k).map(([num]) => num);
}

桶排序

时间复杂度:O(n)O(n)

思路

在 GitHub 上编辑

上次更新于