关于面试:LeetcodeTop-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 个数

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理