[九度][何海涛] 最小的K个数
- 题目描述:
-
输入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); else return 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]); else printf(" %d", a[i]); printf("\n"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】