[Leetcode]Top K问题总结

Posted liuqi627

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Leetcode]Top K问题总结相关的知识,希望对你有一定的参考价值。

问题:

  1. 找第 K 大的数

    1. 在一个数组里
    2. 在数据流中
  2. 找最大的 K 个数

    1. 在一个数组里
    2. 在数据流中
  3. 找出现频率最高的 K 个数

    1. 在一个数组中
    2. 在数据流中
    3. 在文件中

这种题适合各种follow up

核实问题:
是否需要精确的结果?
数据是离线的(文件形式计算一次得到一个结果)还是在线的(数据流可无限次查询实时结果)?

    • -

问题1 - 找第 K 大的数:

  1. 在一个整数数组中,找第 K 大的数 [Leetcode题目]

解法1: 快排整个数组 O(nlogn)
解法2: 快选第K大 O(n) + 快排前k项 O(klogk) = O(n + klogk)

  1. 在一个数据流中,找第 K 大的数 [Leetcode题目]

解法: 最小堆,最小堆的堆顶就是第 K 大的数,插入O(lgk), 查询O(1)

    • -

问题2 - 找最大的 K 个数:

  1. 在一个整数数组中,找最大的 K 个数

解法:同问题1.1解答

  1. 在一个数据流中,找最大 K 个数

解法: 同问题1.2解答,插入O(lgk), 如果查询不需要保持顺序,则O(n),可以用java的iterator实现;如果查询需要保持顺序,则先无序的拿出,然后排序,即O(klgk)


问题3 - 找最高频的 K 个数

以上是关于[Leetcode]Top K问题总结的主要内容,如果未能解决你的问题,请参考以下文章

leetcode算法题基础(四十八) 分治法总结

leetcode算法题基础(四十二) 回溯算法总结

LeetCode题目总结

LeetCode最常见的面试笔试题总结

LeetCode最常见的面试笔试题总结

#Leetcode# 692. Top K Frequent Words