编程之美读书笔记(4)寻找最大的K个数
问题:
有很多无序的数,从中找出最大的K个数。假定他们都不相等。
解法一:
如果数据不是很多,例如在几千个左右,我们可以排一下序,从中找出最大的K个数。排序可以选择快速排序或者堆排序
#include<stdio.h>#include<string.h>const int MaxN = 100;int count[MaxN];int main(){int k = 3;int a[] = {3,17,8,27,7,20};memset(count,0,MaxN);//统计每个数重复次数for(int i = 0;i < 6;i++){count[a[i]]++;}//选取最大K个数int sumCount = 0;for(i = MaxN;i >= 0;i--){sumCount += count[i];if(sumCount >= k){break;}}//输出int index = i;for(i = index;i < MaxN;i++){if(count[i] > 0){printf("%d ",i);}}printf("\n");return 0;}