5.查找最小的 k个元素
来源:互联网 发布:九维外呼软件 编辑:程序博客网 时间:2024/06/04 18:12
/*5.查找最小的 k个元素题目:输入n整数,输出其中最小的k个。例如输入 1,2,3,4,5,6,7 和8这8个数字,则最小的4个数字为1,2,3 和 4。大部分人都是用具有k个元素的大根堆来实现,这里看到个更简单的题中没有要求我们按大小顺序输出其中的最小的k个数!仅仅要求输入这个k个数而已。这就提示我们不必对所有数据进行排序,只需找出这k个最小数而已。只需申请k个大小的数组存储最后的结果,如果数组未填满,就直接将输入的元素放入到数组中;如果数组中放满了k个元素,那么我们就需要找到当前数组中最大的元素值与刚输入的整数值比较,如果刚输入的整数值较小,则进行替换,否则继续输入……查找k个元素数组的最大值时间复杂度为O(k),需要进行n-k次,所以时间复杂度是O(k(n-k)),最后的平均复杂度应该是O(kn)。*/ #include<iostream>#include<stdio.h>using namespace std;#define MAX 100int main(){int max,pos,i,j,n,k,input,data[MAX];while(scanf("%d",&n)&&n)//n个数 {printf("请输入要输出的最小数的个数:");scanf("%d",&k); for(i=1;i<=n;i++){scanf("%d",&input);if(i<=k)data[i]=input;else{max=-9999999;pos=-1;for(j=1;j<=k;j++)if(data[j]>max){max=data[j];pos=j;}if(input<data[pos])data[pos]=input;}}for(i=1;i<=k;i++)printf("%d ",data[i]);printf("\n");}return 0;} /*测试数据 841 2 3 4 5 6 7 8751 4 5 9 2 3 7 9412 14 9 0 1 15 4 90 6421 3 0 0*/
方法2:
partition,然后处理第k个
方法3:
就是大根堆 ,小根堆做,适合海量数据
方法2:
partition
方法3:
就是大根堆 ,小根堆做,适合海量数据
0 0
- 5.查找最小的k个元素
- 5.查找最小的k个元素
- 5.查找最小的k 个元素
- 5.查找最小的k个元素
- 5.查找最小的 k个元素
- 查找最小的k个元素
- 查找最小的k个元素
- 查找最小的 k个元素
- 查找最小的 K 个元素
- 查找最小的k个元素
- 查找最小的k个元素
- 查找最小的k个元素
- 查找最小的k个元素
- 查找最小的k个元素(数组)
- 查找最小的K个元素
- 查找最小的K个元素
- 查找最小的k个元素
- 查找最小的k个元素[算法]
- 记录几款开发客户端常用的工具(Process Monitor & Process Explorer )
- UVA - 565 Pizza Anyone?(状态压缩+暴利枚举)
- 【2142】数据结构实验之图论二:基于邻接表的广度优先搜索遍历 (SDUT)
- Linux协议栈accept和syn队列问题
- 主成分分析
- 5.查找最小的 k个元素
- 黑马程序员-----JAVA多线程
- pojHelp with Intervals线段树解法
- Android自定义字体
- Hi3518C/Hi3516C AR0130 IMX222 IMX122 MT9p006 OV2710 OV9715
- POJ1364King差分约束
- VM及centos安装
- CodeForces 358E - Dima and Kicks
- Java设计模式之装饰模式