【问题描述】

有很多无序的数,我们姑且假定它们各不相等,怎么选出其中最大的若干个数呢?

方法一:时间复杂度min(O(nlogn), O(nk))

idea 1:

先用快速排序或者堆排序进行排序,然后取出最大的k个数,时间复杂度为O(nlogn)+O(k)=O(nlogn)

idea 2:

进行k趟最大冒泡或者k次大顶堆的输出,时间复杂度为O(n*k)

根据k与logn的大小比较,选取时间复杂度低的算法

方法二:时间复杂度O(nlogk)

方法三:时间复杂度为O(n*log( |Vmax - Vmin|  / delta)),数据分布均匀时,时间复杂度为O(nlogn)

寻找N个数中最大的k个数,重点在于宣召最大的k个数中最小的那个,也就是第k大的数。

方法四:用小顶堆

用容量为k的小顶堆来存储最大k个数,从数列中取一个数X与当前的堆顶元素Y比较,若X>Y,则交换,然后调整堆,否则取下一个数进行判断,以此判断直到所有的数都判断完毕。调整堆的时间复杂度为O(logk)

调整更新的伪代码为:

方法五:

所有整数都在(0, max)区间的话,用数组count[max]存储每个数的出现次数。只需扫描一遍即可得到count数组,然后寻找最大的k个数。

编程之美-寻找最大的k个数相关推荐

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

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

  2. 编程之美2.5 寻找最大的K个数

    在一个数组中寻找最大的K个数,我们首先说一种非常简单的方法,利用快速排序中的分割算法,即我们经常看见的partition.这个函数会返回一个 int 类型的值,这个值代表的是前一半数字和后一半数字的分 ...

  3. 微软编程题:寻找最小的k个值

    转载自:http://blog.csdn.net/v_JULY_v/article/details/6370650 寻找最小的k个数 题目描述:5.查找最小的k个元素 题目:输入n个整数,输出其中最小 ...

  4. 海量数据中,寻找最小的k个数。

    维护k个元素的最大堆,即用容量为k的最大堆存储最小的k个数,k1设为大顶堆中最大元素.遍历一次数列,n,每次遍历一个元素x,与堆顶元素比 较,x<kmax,更新堆,否则不更新堆. 1 // 海量 ...

  5. 算法题解之寻找最大的k个数

    一般看到寻找最大的k个数的题目,我们第一想法便是先使用降序排序,然后取前k个即可,这种方法确实是比较常规的,一般情况下也是可行的,但是如果数据十分庞大,则会影响使得创建的数组内存溢出等等.因此,需要对 ...

  6. 寻找最大的k个数问题

    这是编程之美书第2.5节的一道题目. 各种解法: 解法一,用nlgn复杂度的排序算法对数组进行从大到小排序,取前K个.但这方法做了两件不必要做的事:它对想得到的K个数进行了排序,对不想得到的n-K个数 ...

  7. Java实现寻找最小的k个数

    1 问题描述 有n个整数,请找出其中最小的k个数,要求时间复杂度尽可能低. 2 解决方案 2.1 全部排序法 先对这n个整数进行快速排序,在依次输出前k个数. package com.liuzhen. ...

  8. 寻找最大的K个数(上)

    这是一道很经典的题目,有太多方法了,今天写了两种方法,分别是快排和堆排序 1 #include <iostream> 2 using namespace std; 3 #define N ...

  9. java第k大的数字,JAVA中寻找最大的K个数解法

    这个题拿到之后首先会想到排序,排好序之后在选取选取最大的K个数.排序选择快速排序是个比较好的选择. 好了,让我们来进行第一个解法:快速排序 代码如下 复制代码代码如下: public static v ...

最新文章

  1. Java黑皮书课后题第4章:*4.2(几何:最大圆距离)最大圆面积是指球面上两个点间的距离。编写一个程序,提示用户以度为单位输入地球上两个点的经纬度,显示其最大圆距离值
  2. mysql5.7下载及详细安装教程_MySQL 5.7 下载及安装教程(详细)
  3. Python编程常见问题与解答
  4. 详解Python序列解包(3)
  5. MSSQLSERVER查询分析器连接的方法
  6. eureka server启动后端口变为8080问题解决
  7. 就问你慌不慌:每天都有 一百万 程序员在投简历
  8. CHAPTER 28 VMX SUPPORT FOR ADDRESS TRANSLATION
  9. yum安装python3
  10. 位图和矢量图转换工具推荐
  11. html网页文档无法复制粘贴图片,教你处理不能复制粘贴在网页中的详细图文
  12. 成都市计算机会考,四川省高中信息技术会考资料及试题
  13. python学而思和猿辅导哪个好_学而思和猿辅导哪个好,说说我的评价
  14. Discuz安装短信宝短信插件教程
  15. 那些好玩的生成器网站(二)
  16. 辗转相除法——求最大公约数
  17. 低通滤波器 截止频率 学习笔记
  18. Go开发 之 设计模式
  19. 加拿大移民政策调整,注意,这些可能会影响到你
  20. c++新手入门(不定时更新,已肝18500字)

热门文章

  1. MyBatis-05 MyBatis XML方式之update/delete元素
  2. Snackbar-Android M新控件
  3. TextInputLayout-Android M新控件
  4. 学习笔记——itertools模块
  5. java 枚举类型的使用_JAVA 枚举类型使用
  6. python大于等于怎么表示_如何在rejectdb中应用python lambda表达式中的大于等于
  7. excel 复制数据 sql server 粘贴_数据资料复制粘贴麻烦?教你硬盘对拷资料
  8. Java实现反向输出链表
  9. inner join和left join还有right join的区别
  10. 大众EA211djs和css的区别,宣传上却说捷达VS5用的发动机是EA211,但这款车的参数配置栏发动机型号写的却是DJS,谁能为我解惑吗?(只有斯柯达的柯米克的发动机型号写得才是EA211)...