题目:

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

分析:

最先想到的是将数组升序排列,返回前k个元素。不过排序的话效率可能会较低,我们可以使用优先级队列模拟堆来处理。

模拟一个k个元素的最大堆,当堆内元素个数等于k的时候,新来的元素就要和堆顶元素去比较,如果小于堆顶元素,就删除堆顶元素,将新元素添加进堆中,由于最大堆的堆顶元素是最大元素,我们可以保持堆中元素始终是最小的几个,因为每有新的元素来,都会进行比较,最后堆中的元素便是前k个最小元素了。

吐个槽,这种题最后输出又不需要顺序了,牛客网判题真的迷。

程序:

C++

class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
if(input.size() == || k == || k > input.size())
return res;
for(int num:input){
if(q.size() < k)
q.push(num);
else{
if(num < q.top()){
q.pop();
q.push(num);
}
}
}
while(!q.empty()){
res.push_back(q.top());
q.pop();
}
//reverse(res.begin(), res.end());
return res;
}
private:
vector<int> res;
priority_queue<int> q;
};

Java

import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
if(input.length == 0 || k == 0 || k > input.length)
return res;
for(int num:input){
if(queue.size() < k)
queue.add(num);
else{
if(num < queue.peek()){
queue.poll();
queue.add(num);
}
}
}
for(Integer i : queue) {
res.add(i);
}
return res;
}
static Comparator<Integer> cmp = new Comparator<Integer>() {
public int compare(Integer e1, Integer e2) {
return e2 - e1;
}
};
private ArrayList<Integer> res = new ArrayList<>();
private PriorityQueue<Integer> queue = new PriorityQueue<>(cmp);
}

最新文章

  1. SecurityContextHolder.getContext().getAuthentication() return null
  2. 转-临界区对象TCriticalSection与TRTLCriticalSection的区别
  3. html5 css3 loading 效果
  4. Redis学习笔记~Redis主从服务器,读写分离
  5. JavaSE 和 JavaEE 的关系
  6. ooj 1066 青蛙过河DP
  7. Keil RTX systick 初始化
  8. 实现jsp网页设为首页功能
  9. 如何使用CSS实现小三角形效果
  10. 关于PYTHON的反射,装饰的练习
  11. 每次都觉得很神奇的JS
  12. Visual C++ 2012/2013的内存溢出检測工具
  13. 编程语言大牛王垠:编程的智慧,带你少走弯路 [本文转载CocoaChina]
  14. AJAX验证数据库内容并显示在页面
  15. VC使用双缓冲避免绘图闪烁的正确使用方法【转】
  16. Hama学习总结
  17. gray-code (格雷码)
  18. bash基础特性3(shell编程)
  19. 定时执行自动化脚本-(二)ant发送邮件及邮件中添加附件
  20. (转载)C#:Form1_Load()不被执行的三个解决方法

热门文章

  1. 了解这一行的,腰包都鼓鼓的了,程序辅导,CS作业
  2. 源码剖析Yii错误 Invalid parameter number: no parameters were bound
  3. 类和对象(day19整理)
  4. 基于 HTML5 + Canvas 实现的 PID 可视化系统
  5. 数据库优化 - SQL优化
  6. tomcat的虚拟路径的配置
  7. element 自定义 el-loading
  8. Unity4-用户输入
  9. 使用Typescript重构axios(二十四)——防御XSRF攻击
  10. P1041 传染病控制(noip2003)(搜索)