1. 剑指Offer - 九度1371 - 最小的K个数
    2013-11-23 15:45
题目描述:

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

输入:

每个测试案例包括2行:

第一行为2个整数n,k(1<=n,k<=200000),表示数组的长度。

第二行包含n个整数,表示这n个数,数组中的数的范围是[0,1000 000 000]。

输出:

对应每个测试案例,输出最小的k个数,并按从小到大顺序打印。

样例输入:
  1. 8 4
  2. 4 5 1 6 2 7 3 8
样例输出:
  1. 1 2 3 4
  1. 题意分析:
      给定n个数,求出其中最小的k个数,nk的范围都是20万。基本思路如下:
        1. 全排序n个数,然后顺着数出k个,时间复杂度O(n * log(n) + k),空间复杂度O(1)。
        2. 最大堆来存k个数,剩下的n-k个数每个都和堆顶比较,比堆顶小时,就把堆顶元素替换掉。采取先pop()后push()的方法替换。时间复杂度O(n * log(k)),空间复杂度O(k)。
        3. 直接统计每个值出现的次数,要么用hash,要么用map。然后数出最小的k个值即可。时间复杂度O(n),空间复杂度O(S),S为数组元素的取值范围。
      根据此题的数据范围,nk的大小不固定,可能很接近也可能差很远,所以方法1和方法2都可行。nk接近时适合方法1,相差很远时适合方法2。方法3由于数组元素的取值范围太大,不可行。
      对于方法3,一个很适用的问题,就是统计高考分数和排名。总共750分满分,一个省几十万考生,用桶排序的思想很容易就能算出某分数的全省排名。
  1. // 652996 zhuli19901106 1371 Accepted 点击此处查看所有case的执行结果 1796KB 931B 950MS
  2. //
  3. #include <cstdio>
  4. #include <queue>
  5. #include <vector>
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10. // min heap
  11. priority_queue<int, vector<int>, less<int> > pq;
  12. vector<int> vv;
  13. int n, k;
  14. int i, tmp;
  15.  
  16. while(scanf("%d%d", &n, &k) == ){
  17. while(!pq.empty()){
  18. pq.pop();
  19. }
  20. vv.clear();
  21.  
  22. if(k > n){
  23. k = n;
  24. }
  25. for(i = ; i < k; ++i){
  26. scanf("%d", &tmp);
  27. pq.push(tmp);
  28. }
  29.  
  30. for(i = k; i < n; ++i){
  31. scanf("%d", &tmp);
  32. if(tmp < pq.top()){
  33. pq.pop();
  34. pq.push(tmp);
  35. }
  36. }
  37.  
  38. while(!pq.empty()){
  39. vv.push_back(pq.top());
  40. pq.pop();
  41. }
  42.  
  43. for(i = (int)vv.size() - ; i >= ; --i){
  44. if(i == (int)vv.size() - ){
  45. printf("%d", vv[i]);
  46. }else{
  47. printf(" %d", vv[i]);
  48. }
  49. }
  50. printf("\n");
  51. vv.clear();
  52. }
  53.  
  54. return ;
  55. }

剑指Offer - 九度1371 - 最小的K个数的更多相关文章

  1. 剑指Offer:面试题30——最小的k个数(java实现)

    问题描述: 输入n个整数,找出其中最小的k个数 思路1: 先排序,再取前k个 时间复杂度O(nlogn) 下面给出快排序的代码(基于下面Partition函数的方法) public void Quic ...

  2. 九度 1371 最小的K个数

    题目描述:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 输入: 每个测试案例包括2行:第一行为2个整数n,k(1<= ...

  3. 剑指offer(29)最小的K个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 题目分析 这题有两种方法来做. 第一种就是基于partition的 ...

  4. 【剑指Offer】29、最小的K个数

      题目描述:   输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4.   解题思路:   本题最直观的解法就是将输入的n个整数排 ...

  5. 剑指offer 面试题40. 最小的k个数

    O(N)划分法,注意这个方法会改变原数据(函数参数是引用的情况下)!当然也可以再定义一个新容器对其划分 要求前k小的数,只要执行快排划分,每次划分都会把数据分成大小两拨.直到某一次划分的中心点正好在k ...

  6. 剑指Offer - 九度1504 - 把数组排成最小的数

    剑指Offer - 九度1504 - 把数组排成最小的数2014-02-06 00:19 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输 ...

  7. 剑指Offer - 九度1386 - 旋转数组的最小数字

    剑指Offer - 九度1386 - 旋转数组的最小数字2013-11-24 01:57 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转 ...

  8. 剑指Offer - 九度1503 - 二叉搜索树与双向链表

    剑指Offer - 九度1503 - 二叉搜索树与双向链表2014-02-05 23:39 题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树 ...

  9. 剑指Offer - 九度1360 - 乐透之猜数游戏

    剑指Offer - 九度1360 - 乐透之猜数游戏2014-02-05 19:54 题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备 ...

随机推荐

  1. Js Date类型

    一:格式化方法 var box=new Date(); //标准时间,如果没传参数,得到的时间为当前时间 //alert(Date.parse('4/12/2007')); //11763072000 ...

  2. 硬件-ESP32S模块资料

    1.产品概述 ESP-32S WiFi 模块是由安信可科技自主设计研发,该模块核心处理器 ESP32提供了一套完整的802.11 b/g/n/e/i 无线局域网(WLAN)和蓝牙4.2解决方案,具有最 ...

  3. *204. Count Primes (siecing prime)

    Count the number of prime numbers less than a non-negative number, n. Example: Input: 10 Output: 4 E ...

  4. 了解iOS上的可执行文件和Mach-O格式

    http://www.cocoachina.com/mac/20150122/10988.html http://www.reinterpretcast.com/hello-world-mach-o ...

  5. Poj (3239),m皇后问题

    题目链接:http://poj.org/problem?id=3239 构造法很牛逼啊,把这个搜索的题直接变成了打表. 我用dfs写了一下. 构造法公式(序列):一.当n mod 6 != 2 或 n ...

  6. 在写移动端时,a标签或者input标签等 在手机上点击背后会有阴影的解决办法

    a,input{-webkit-tap-highlight-color:rgba(255,0,0,0);} 被背景设置成透明的就行了

  7. 解决cdh4.5.0下 MAP任务看不到状态

    参考 http://qnalist.com/questions/772595/yarn-jobhistory-service 在mapreduce-site.xml中添加 <property&g ...

  8. Javascript Ajax 请求

    var XMLHttpReq; function createXMLHttpRequest() { try { XMLHttpReq = new ActiveXObject("Msxml2. ...

  9. java、javac -version不一致(java编译及运行环境不一致)的环境变量设置问题解决

    问题描述: 电脑上同时安装了JDK1.6与1.7  设置了环境变量JAVA_HOME为jdk1.6.0_21的安装目录,并且在PATH变量中加入了%JAVA_HOME%\bin,但在Windows命令 ...

  10. 第一个AngularJS指令

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...