题目描述:

输入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个数,并按从小到大顺序打印。

样例输入:
8 4
4 5 1 6 2 7 3 8
样例输出:
1 2 3 4

可以用一个K大小的最大队来做,当堆的个数<K时放入,否则当堆的根大于当前数,弹出堆的根,插入当前数。另外一种就是用partition来找第K大数,这样它前面的保证都是比它小的,所以K个数就找到了。
 1 #include <iostream>
 2 #include <vector>
 3 #include <cstdio>
 4 #include <queue>
 5 using namespace std;
 6
 7 void print(priority_queue<int, vector<int>, less<int> > &maxHeap)
 8 {
 9     if (maxHeap.empty())
10         return;
11
12     int element = maxHeap.top();
13     maxHeap.pop();
14     bool status = maxHeap.empty();
15
16     print(maxHeap);
17
18     if (status)
19         printf("%d", element);
20     else
21         printf(" %d", element);
22 }
23
24 int main()
25 {
26     int n, k;
27
28     while(scanf("%d%d", &n, &k) != EOF)
29     {
30         priority_queue<int, vector<int>, less<int> > maxHeap;
31
32         int num;
33         for(int i = 0; i < n; i++)
34         {
35             scanf("%d", &num);
36             if (maxHeap.size() < k)
37                 maxHeap.push(num);
38             else
39             {
40                 if (maxHeap.top() > num)
41                 {
42                     maxHeap.pop();
43                     maxHeap.push(num);
44                 }
45             }
46         }
47
48         print(maxHeap);
49         printf("\n");
50     }
51 }

#include <iostream>
#include <ctime>
#include <algorithm>
#include <cstdio>
using namespace std;void partition(int a[], int left, int right, int k)
{int randNum = left + (rand() % (right - left + 1));int t = a[randNum];a[randNum] = a[left];a[left] = t;int i = left;int j = right;int key = a[left];while(i <= j){if (a[i] <= key)i++;else{int t = a[j];a[j] = a[i];a[i] = t;j--;}}a[left] = a[j];a[j] = key;if (j == k)return;else if (j > k)return partition(a, left, j - 1, k);elsereturn partition(a, j + 1, right, k);
}int main()
{int n, k;int a[200000];while(scanf("%d%d", &n, &k) != EOF){for(int i = 0; i < n; i++)scanf("%d", &a[i]);srand(time(NULL));partition(a, 0, n - 1, k - 1);sort(a, a + k);for(int i = 0; i < k; i++)if (i == 0)printf("%d", a[i]);elseprintf(" %d", a[i]);printf("\n");}
}

[九度][何海涛] 最小的K个数相关推荐

  1. 九度 1371 最小的K个数

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

  2. 在哪里能收到python实例代码-Python找出最小的K个数实例代码

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复 ...

  3. 面试题整理10 最小的k个数

    <剑指offer>面试题30: 题目:输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 分析:求数组的第k小,如果能 ...

  4. C#刷剑指Offer | 【常考题】最小的k个数

    [C#刷题]| 作者 / Edison Zhou 这是EdisonTalk的第299篇学习分享 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目) ...

  5. 剑指offer面试题40. 最小的k个数(sort函数)

    题目描述 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 思路 详见链接 代码 class Solution: ...

  6. [剑指 offer]--大顶堆 ➕ 快速选择 --面试题40. 最小的k个数

    1 题目描述 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:arr = [3,2,1], ...

  7. 程序员编程艺术:第三章、寻找最小的k个数

    程序员编程艺术:第三章.寻找最小的k个数 作者:July. 时间:二零一一年四月二十八日. 致谢:litaoye, strugglever,yansha,luuillu,Sorehead,及狂想曲创作 ...

  8. 最小的k个数(第k小的数)

    1. 利用快排的思想,由于每次只选择左右部分中的一部分,因此时间复杂度为O(n). # -*- coding:utf-8 -*- class Solution:# (O(n)复杂度)def GetLe ...

  9. 46最小的k个数 47寻找第k大

    46 最小的k个数 第一反应排序的话是O(nlogn),暴力是O(NK),看了题解用优先队列,因为优先队列插入元素需要logn,我们只要让堆的大小控制在k,插入一个元素就值需要logk,这样整体的时间 ...

  10. 伍六七带你学算法 入门篇-最小的k个数

    java面试题-最小的k个数 难度-简单 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:a ...

最新文章

  1. 2017-2-19 C#基础 基本数据类型的转换,转义字符,常量
  2. 新手向:从不同的角度来详细分析Redis
  3. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170328
  4. PyCharm中配置与PyQT5相关的External tools
  5. 最好用最方便的sqlite管理工具
  6. ant如何形成时间轴和图库_如何让景观设计更具有逻辑性?
  7. JQuery使用总结
  8. 编译的警告:隐式声明与内建函数 ‘malloc’ 不兼容
  9. 百度文库下载工具(引言及使用教程)
  10. JMeter使用实践之造数据
  11. matlab胡良剑第五章,matlab数学实验第一至第四章答案(胡良剑)
  12. C# 读取网卡、设置网上、自动连接Wifi
  13. 为什么变量命名不建议用汉语拼音
  14. 文件被占用删除不了?快来我给你一招解决!
  15. HA架构中的脑裂,什么是脑裂,怎样预防脑裂?
  16. finalize方法的使用
  17. 祖玛游戏python
  18. python切面异常处理_node端统一错误处理
  19. thinkpad x61-lg2装XP
  20. rnss和rdss的应用_浅谈北斗二代RDSS和RNSS组合技术.doc

热门文章

  1. (转)首个比特币投资基金在加拿大获批上线!
  2. 因云而生,阿里云全面进入云原生时代
  3. 【优化预测】基于matlab布谷鸟搜索算法优化SVM预测【含Matlab源码 1525期】
  4. 【基础教程】基于matlab图像去噪总结【含Matlab源码 1274期】
  5. 【TWVRP】基于matalb模拟退火算法求解带时间窗的车辆路径规划问题【含Matlab源码 160期】
  6. 思维导图ubuntu_Ubuntu——思维导图导安装和configuration area错误
  7. karma看fits文件软件操作汇总【第三个维度的变化】【查看某个范围的RMS值】
  8. 2021/4/2听宫老师演讲有感。
  9. 解决pip install 库 下载速度慢的问题
  10. 2008服务器系统安装哪个版本好,Windows Server 2008和Windows Server 2008 R2哪个更好,其中可选的安装版本那个最高级,都有什么用?...