当前位置:   article > 正文

最小的K个数_给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数

给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数

给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是4,1,2,3(按照原数组顺序输出)。

数据范围:0<k,n<=10000,n>=k,数组中每个数的大小0<=val<=1000,

输入格式:

输入第一行长度n,个数k

第二行数组的各个元素

输出格式:

按原数组顺序输出最小的k个数,每个数的后面均有空格

输入样例:

在这里给出一组输入。例如:

  1. 8 4
  2. 4 5 1 6 2 7 3 8

输出样例:

在这里给出相应的输出。例如:

4 1 2 3 

 思路:先对数据进行排序,确定最小值k个数的范围,然后遍历原始数据,对符合范围要求的数据进行输出,但要特别注意的是要确定最小K个数中最大值的个数,输出完最大值的个数后再不能对最大值进行输出。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n,m,min,max,maxcount=0;
  5. int data[10000],a[10000];
  6. scanf("%d%d",&n,&m);
  7. for(int i=0;i<n;i++)
  8. {
  9. scanf("%d",&a[i]);
  10. data[i]=a[i];
  11. }
  12. for(int i=0;i<n-1;i++)
  13. {
  14. min=i;
  15. for(int j=i+1;j<n;j++)
  16. {
  17. if(data[j]<data[min])
  18. {
  19. min=j;
  20. }
  21. }
  22. if(min!=i)
  23. {
  24. int temp=data[i];
  25. data[i]=data[min];
  26. data[min]=temp;
  27. }
  28. }
  29. max=data[0];
  30. min=data[0];
  31. for(int i=1;i<m;i++)
  32. {
  33. if(data[i]>max)
  34. {
  35. max=data[i];
  36. }
  37. if(data[i]<min)
  38. {
  39. min=data[i];
  40. }
  41. }
  42. for(int i=0;i<m;i++)
  43. {
  44. if(data[i]==max)
  45. {
  46. maxcount++;
  47. }
  48. }
  49. for(int i=0;i<n;i++)
  50. {
  51. if(a[i]>=min&&a[i]<=max)
  52. {
  53. if(a[i]==max&&maxcount!=0)
  54. {
  55. printf("%d ",a[i]);
  56. maxcount--;
  57. }
  58. if(a[i]!=max)
  59. {
  60. printf("%d ",a[i]);
  61. }
  62. }
  63. }
  64. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/295237
推荐阅读
相关标签
  

闽ICP备14008679号