545. 前K大数 II

Posted yunxintryyoubest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了545. 前K大数 II相关的知识,希望对你有一定的参考价值。

545. 前K大数 II

中文English

实现一个数据结构,提供下面两个接口
1.add(number) 添加一个元素
2.topk() 返回前K大的数

样例

样例1

输入: 
s = new Solution(3);
s.add(3)
s.add(10)
s.topk()
s.add(1000)
s.add(-99)
s.topk()
s.add(4)
s.topk()
s.add(100)
s.topk()
		
输出: 
[10, 3]
[1000, 10, 3]
[1000, 10, 4]
[1000, 100, 10]

解释:
s = new Solution(3);
>> 生成了一个新的数据结构, 并且 k = 3.
s.add(3)
s.add(10)
s.topk()
>> 返回 [10, 3]
s.add(1000)
s.add(-99)
s.topk()
>> 返回 [1000, 10, 3]
s.add(4)
s.topk()
>> 返回 [1000, 10, 4]
s.add(100)
s.topk()
>> 返回 [1000, 100, 10]

样例2

输入: 
s = new Solution(1);
s.add(3)
s.add(10)
s.topk()
s.topk()

输出: 
[10]
[10]

解释:
s = new Solution(1);
>> 生成了一个新的数据结构, 并且 k = 1.
s.add(3)
s.add(10)
s.topk()
>> 返回 [10]
s.topk()
>> 返回 [10]
 
 
输入测试数据 (每行一个参数)如何理解测试数据?

 方法一:列表 + sorted排序

class Solution:
    """
    @param: k: An integer
    """
    def __init__(self, k):
        # do intialization if necessary
        self.k = k 
        self.array = []

    """
    @param: num: Number to be added
    @return: nothing
    """
    def add(self, num):
        # write your code here
        self.array.append(num)

    """
    @return: Top k element
    """
    def topk(self):
        # write your code here
        
        array = []
        for i in self.array:
            array.append(i)
        
        return sorted(array)[:: -1][: self.k]

 

方法二:堆方式实现

#堆方式实现
import heapq

class Solution:
    """
    @param: k: An integer
    """
    def __init__(self, k):
        # do intialization if necessary
        self.k = k 
        self.heap = []

    """
    @param: num: Number to be added
    @return: nothing
    """
    def add(self, num):
        # write your code here
        heapq.heappush(self.heap, num)

    """
    @return: Top k element
    """
    def topk(self):
        # write your code here
        
        return heapq.nlargest(self.k, self.heap)

 

以上是关于545. 前K大数 II的主要内容,如果未能解决你的问题,请参考以下文章

快排划分思想的应用-求第k大数或者第k小的数(求前k大数或者前k小的数)

(母函数 Catalan数 大数乘法 大数除法) Train Problem II hdu1023

HPU 1002 A + B Problem II大数

HDU1002 A + B Problem II 大数问题

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

大数加法 (A + B Problem II)