领扣LintCode算法问题答案-545. 前K大数 II
545. 前K大数 II
描述
实现一个数据结构,提供下面两个接口
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]
题解
public class Solution {
private final int k;
private List<Integer> nums = new ArrayList<>();
/*
* @param k: An integer
*/
public Solution(int k) {
// do intialization if necessary
this.k = k;
}
/*
* @param num: Number to be added
* @return: nothing
*/
public void add(int num) {
// write your code here
nums.add(num);
}
/*
* @return: Top k element
*/
public List<Integer> topk() {
// write your code here
Collections.sort(nums);
List<Integer> ret = new ArrayList<>();
for (int i = nums.size() - 1; i >=0; i--) {
if (ret.size() >= k) {
break;
}
ret.add(nums.get(i));
}
return ret;
}
}
鸣谢
非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。