Python 返回数据流中的第k大元素 LeetCode NO.703

Python 返回数据流中的第k大元素 LeetCode NO.703

Python 返回数据流中的第k大元素 LeetCode NO.703_第1张图片
思路:

  1. 在理解这个题目的时候,首先大家要理解,heap的概念,也就是堆是什么(在这里简单的说下,一般而言我们说的堆都是树的结构,分为最大堆和最小堆,也就是堆顶的元素是是最大值还是最小值区分的。但是不只是树来实现的,还有二项式堆,斐波拉契堆,大家可以维基百科一下,各种操作的时间复杂度)。并且一般的高级语言中,都会实现heap这样的数据结构。python中的heap的包在这里,一些基本操作和例子可以看一下
  2. 正式讲解思路,有了heap这样的结构就很好办来,首先可以从这个list当中找到前k大的值,然后把这k个值,组成一个最小堆,那个这个堆顶的元素,就是第k大的数。重点是,在进行添加的过程中还要找到第k大的值才是关键。当添加元素的时候,我们只需要维护这样一个小顶堆就可以了。具体看代码
import heapq
class KthLargest(object):

    def __init__(self, k, nums):
        """
        :type k: int
        :type nums: List[int]
        """
        #使用取出前k大的值,把这样的list变成heap
        self.pool = heapq.nlargest(k, nums)
        heapq.heapify(self.pool)
        self.k = k

    def add(self, val):
        """
        :type val: int
        :rtype: int
        """
        
        if len(self.pool) < self.k:
            heapq.heappush(self.pool, val)
        else:
            heapq.heappushpop(self.pool, val)
        return self.pool[0]

你可能感兴趣的:(python,LeetCode,面试)