703. Kth Largest Element in a Stream

题目来源:

https://leetcode.com/problems/kth-largest-element-in-a-stream/

 
自我感觉难度/真实难度:
 
题意:

这个题目的意思解读了半天,没搞明白什么意思,后来画了一下图,一下子就明了

分析:
 

 

自己的代码:
代码效率/结果:
 
优秀代码:
class KthLargest:

    def __init__(self, k, nums):
        """
        :type k: int
        :type nums: List[int]
        """
        self.pool=nums
        self.size=len(self.pool)
        self.k=k
        heapq.heapify(self.pool)
        while self.size>k:
            heapq.heappop(self.pool)
            self.size-=1

    def add(self, val):
        """
        :type val: int
        :rtype: int
        """
        if self.size<self.k:
            heapq.heappush(self.pool,val)
            self.size+=1
        elif val>self.pool[0]:
            heapq.heapreplace(self.pool,val)
        return self.pool[0]

 

代码效率/结果:

 

 
自己优化后的代码:
 
反思改进策略:

1.熟悉了一下怎么使用heapqd的常规函数

2.最后这个

if self.size<self.k:
是不是可以省略呢,size是不是不可能大于K,因为初始化的时候,数组就只有K那么大?后面用的replace,不会变大的
验证了一下,不行的:因为输入的list,有可能是空的,这样会报错,out of index

posted @ 2019-01-20 22:47  dgi  阅读(279)  评论(0编辑  收藏  举报