最小的K个数
来源:互联网 发布:javascript按钮弹窗 编辑:程序博客网 时间:2024/06/05 04:58
题目描述
输入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 44 5 1 6 2 7 3 8
样例输出
1 2 3 4
#include<iostream>#include<algorithm>using namespace std;int partition(int arr[], int s, int e){ int x = arr[s]; int r = e+1; int l = s; while(l < r){ while(l<e && arr[++l] <= x); while(r>s && arr[--r] > x); if(l >= r) break; swap(arr[r], arr[l]); } arr[s] = arr[r]; arr[r] = x; return r;}int k;void minK(int arr[],int start,int end){ if(start >= end) return; int index = partition(arr,start,end); if(index == k) return; if(index > k) minK(arr,start,index-1); else minK(arr,index+1,end);}const int M = 200001;int n,arr[M];int main(){int i; while(scanf("%d%d",&n, &k) != EOF){ for(int i=0; i<n; i++){cin >> arr[i]; } --k; minK(arr,0,n-1); sort(arr,arr+k+1); for( i=0; i<k; i++)cout << arr[i] << ' '; cout << arr[k] << endl; } return 0;}
0 0
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的K个数
- 最小的k个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的k个数
- 最小的k个数
- iOS 利用OpenGLES画一个带多重纹理的旋转的立方体
- 工厂工艺学习
- 《烟云浮楼》第一章——初出白玉村
- hdu 2234 IDA*算法
- linux socket
- 最小的K个数
- 机器学习术语:来自《机器学习/周志华》
- 每一天
- C#与Javascript变量、函数之间的相互调用
- 清除浮动的三种方法
- Android ANR错误的原因以及解决方法(Application Not Responding)
- 在ActiveX控件对话框中添加系统自带的ocx控件出现Debug Assertion Failed
- 愚人节的礼物
- 进程和线程的区别