def top_k(nums, k): if len(nums) <= k: return nums min_h = MinHeap(nums[:k], k) for i in range(k, len(nums)): tmp = min_h.get_top() if nums[i] > tmp: min_h.remove_top() min_h.insert(nums[i]) return min_h.get_data()
def top_k(nums,k): """ 返回数组的前k大元素 :param nums: :param k: :return: """ if len(nums) <= k: return nums min_h = MinHeap(nums[:k],k) for i in range(k,len(nums)): tmp = min_h.get_top() if nums[i]> tmp: min_h.remove_top() min_h.insert(nums[i]) return min_h.get_data()
def top_k(nums, k): """ Return the top k elements of the array :param nums: :param k: :return: """ if len(nums) <= k: return nums min_h = MinHeap(nums[:k], k) for i in range(k, len(nums)): tmp = min_h.get_top() if nums[i] > tmp: min_h.remove_top() min_h.insert(nums[i]) return min_h.get_data()
def get_static_top_k(nums, k): """ get top-K of static data :param nums: :param k: :return: """ if len(nums) <= k: return nums min_h = MinHeap(nums[:k], k) # one time use min_h.build_heap() # compare data with heap top for n in range(k, len(nums)): tmp = min_h.get_top() if nums[n] > tmp: # if larger, change data min_h.remove_top() min_h.insert(nums[n]) return min_h.get_data()
def top_k(nums, k): """ 返回数组的前k大元素 :param nums: :param k: :return: """ if len(nums) <= k: return nums # 先把nums列表的前k个元素构成小顶堆,大于等于堆顶元素的有k-1个,整个堆为前k大元素 min_h = MinHeap(nums[:k], k) # 其余各个元素 如果大于堆顶元素,则把堆顶元素移除,并添加新元素并从下到上堆化 for i in range(k, len(nums)): tmp = min_h.get_top() if nums[i] > tmp: min_h.remove_top() min_h.insert(nums[i]) return min_h.get_data()
def get_top_k(nums, k): """ 返回数组的前k大元素 :param nums: :param k: :return: """ if len(nums) < k: return nums min_heap = MinHeap(nums[:k], k) for i in range(k, len(nums)): heap_top = min_heap.get_top() if nums[i] > heap_top: min_heap.remove_top() min_heap.insert(nums[i]) return min_heap.get_data()
class TopK: def __init__(self, k): self.k = k self.heap = MinHeap(capacity=k) def add_data(self, num): assert type(num) is int if self.heap.get_length() < self.k: self.heap.insert(num) else: tmp = self.heap.get_top() if num > tmp: # if larger, change data self.heap.remove_top() self.heap.insert(num) def get_top_k(self): return 'current top-k is :' + str(self.heap.get_data()) def __repr__(self): return self.heap.__repr__()