Skip to content

关于“求第 K 大”小顶堆解法与 LeetCode 215.数组中的第K个最大元素时间复杂度要求的疑问 #2899

Description

@MoChiUaena

相关位置

在《堆详解(最大堆、最小堆、优先队列)》这篇文章中“Top K 问题常见选择”部分,原文写道:

求第 K 大:维护大小为 K 的小顶堆。
求前 K 高频:先用哈希表计数,再用小顶堆保留 K 个高频元素。
数据流中位数:一个大顶堆维护较小的一半,一个小顶堆维护较大的一半。

这三种场景似乎正好对应 LeetCode Hot 100 中“堆”专题的三道题:

  • 数组中的第 K 个最大元素
  • 前 K 个高频元素
  • 数据流的中位数

疑问

对于“数组中的第 K 个最大元素”(LeetCode 215),题目明确要求设计时间复杂度为 O(n) 的算法。

维护大小为 K 的小顶堆时,每个元素的入堆/调整成本最多为 O(log K),遍历 n 个元素的总时间复杂度为:O(n log K)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions