该方法思想:将N个数分为N/K段,查找每一段的最大值,然后在N/k个最大值中选择一个最大值,然后在选择最大值的那段中,再选择一个最大值,一次类推直到完成K个最大值的选择

时间复杂度接近O(n)

代码如下:

#include "stdafx.h"
#include <stdio.h>
#include <iostream>using namespace std;
int getMaxFromArray(int numb[],int begIndex,int endIndex)
{int result=numb[begIndex];int indexValue=begIndex;for (int i=begIndex+1;i<endIndex;i++){if (numb[i]>result){result=numb[i];indexValue=i;}}numb[indexValue]=INT_MIN;return result;
}
int main()
{int numb[1000];int n;while (scanf("%d",&n)!=EOF){for (int i=0;i<n;i++){scanf("%d",numb[i]);}int k;scanf("%d",&k);if (k>=n){for (int i=0;i<n;i++){printf("%d ",numb[i]);}}else{int interval=n/k;int *tmp=new int[k];int *result=new int[k];int begindex=0,endIndex=0;for (int i=1;i<=k;i++){endIndex=i*interval;tmp[i-1]=getMaxFromArray(numb,begindex,endIndex);begindex=endIndex;}int maxValue=tmp[0];int indexValue=0;int copyK=k-1;for (int i=1;i<k;i++){if (tmp[i]>maxValue){maxValue=tmp[i];indexValue=i;} }result[0]=maxValue;while (copyK){tmp[indexValue]=getMaxFromArray(numb,(indexValue-1)*interval,indexValue*interval);maxValue=tmp[0];indexValue=0;for (int i=1;i<k;i++){if (tmp[i]>maxValue){maxValue=tmp[i];indexValue=i;}}result[k-copyK]=maxValue;copyK--;}}}return 0;
}

  

转载于:https://www.cnblogs.com/csxf/p/3460329.html

求解N个值中最大的k个数,N远大于k相关推荐

  1. 46最小的k个数 47寻找第k大

    46 最小的k个数 第一反应排序的话是O(nlogn),暴力是O(NK),看了题解用优先队列,因为优先队列插入元素需要logn,我们只要让堆的大小控制在k,插入一个元素就值需要logk,这样整体的时间 ...

  2. 找出N个元素的数组中最大的K个数

    转载请提供原创链接 http://blog.csdn.net/shuiziliu1025/article/details/50958241 题目: 给出 N 个整数(N可能很大,以致无法装入内存),找 ...

  3. 找出N个整数中最大的K个数

    原文来自:博客园(华夏35度)http://www.cnblogs.com/zhangchaoyang 作者:Orisun 如题:给出N个整数(N可能很大,以致无法装入内存),找出前K个最大的整数 [ ...

  4. 程序员编程艺术:第三章、寻找最小的k个数

    程序员编程艺术:第三章.寻找最小的k个数 作者:July. 时间:二零一一年四月二十八日. 致谢:litaoye, strugglever,yansha,luuillu,Sorehead,及狂想曲创作 ...

  5. 在哪里能收到python实例代码-Python找出最小的K个数实例代码

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复 ...

  6. C#刷剑指Offer | 【常考题】最小的k个数

    [C#刷题]| 作者 / Edison Zhou 这是EdisonTalk的第299篇学习分享 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目) ...

  7. 最小的k个数 java_【Java】 剑指offer(40) 最小的k个数

    本文参考自<剑指offer>一书,代码采用Java语言. 题目 输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 思 ...

  8. 二分查找,查指定值、小于或等于k的最大值,大于或等于k的最大值

    (图文)二分查找,查指定值.小于或等于k的最大值,大于或等于k的最大值 我们经常会用到二分查找 二分查找应该很多人都会写了,今天要写一个用二分查找找到小于k的最大值的时候看了很久不懂他设计的思路,后来 ...

  9. 【Java】 剑指offer(40) 最小的k个数

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7 ...

最新文章

  1. 中國web2.0現狀與趨勢調查報告
  2. [转]url传递中文的解决方案总结
  3. uni-app——map组件路线[polyline]功能示例
  4. vim编辑器初级(七)
  5. leetcode944. 删列造序
  6. CAD 开发 图案填充
  7. FishC笔记—15 讲 字符串:格式化
  8. 《2021企业数智化转型升级服务全景图/产业图谱1.0版》重磅发布
  9. java 杨辉三角_JAVA实现杨辉三角的三种方式
  10. 纯CSS中的可视数据库库
  11. 华为鸿蒙开发者大赛,超25000位开发者,华为举办首届鸿蒙开发者创新大赛颁奖典礼...
  12. 2021年最受数据分析师欢迎的副业排行榜TOP1
  13. UVA11021 Tribles 概率
  14. 何为AppID、 AppKey、AppSecret?
  15. 【快递下单小程序源码】可运营+快递下单微信小程序
  16. Linux ——objdump和readelf的使用
  17. linux如何查看磁盘坏道
  18. http://user.qzone.qq.com/383074470/blog/1270631840
  19. 软件测试实战项目04:打包app
  20. bs4+phantomjs爬取安居客二手房信息

热门文章

  1. 如何下载python软件-python如何下载
  2. python单词大全-python词汇大全
  3. 如何用python创建一个下载网站-用Python写一个简单的网页下载
  4. python是基于什么语言开发-2.python是什么编程语言。
  5. python好还是c语言好-初学者先学习python语言还是C语言
  6. pythonexe32位-如何使用pyinstaller打包32位的exe程序
  7. python语法大全-python基本语法
  8. python推荐入门书籍-学python入门看什么书
  9. winpython使用教程-如何使用Python自动控制windows桌面
  10. python软件代码示例-Python学习示例源码