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)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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