编程之美-寻找最大的k个数
【问题描述】
有很多无序的数,我们姑且假定它们各不相等,怎么选出其中最大的若干个数呢?
方法一:时间复杂度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个数相关推荐
- 程序员编程艺术:第三章、寻找最小的k个数
程序员编程艺术:第三章.寻找最小的k个数 作者:July. 时间:二零一一年四月二十八日. 致谢:litaoye, strugglever,yansha,luuillu,Sorehead,及狂想曲创作 ...
- 编程之美2.5 寻找最大的K个数
在一个数组中寻找最大的K个数,我们首先说一种非常简单的方法,利用快速排序中的分割算法,即我们经常看见的partition.这个函数会返回一个 int 类型的值,这个值代表的是前一半数字和后一半数字的分 ...
- 微软编程题:寻找最小的k个值
转载自:http://blog.csdn.net/v_JULY_v/article/details/6370650 寻找最小的k个数 题目描述:5.查找最小的k个元素 题目:输入n个整数,输出其中最小 ...
- 海量数据中,寻找最小的k个数。
维护k个元素的最大堆,即用容量为k的最大堆存储最小的k个数,k1设为大顶堆中最大元素.遍历一次数列,n,每次遍历一个元素x,与堆顶元素比 较,x<kmax,更新堆,否则不更新堆. 1 // 海量 ...
- 算法题解之寻找最大的k个数
一般看到寻找最大的k个数的题目,我们第一想法便是先使用降序排序,然后取前k个即可,这种方法确实是比较常规的,一般情况下也是可行的,但是如果数据十分庞大,则会影响使得创建的数组内存溢出等等.因此,需要对 ...
- 寻找最大的k个数问题
这是编程之美书第2.5节的一道题目. 各种解法: 解法一,用nlgn复杂度的排序算法对数组进行从大到小排序,取前K个.但这方法做了两件不必要做的事:它对想得到的K个数进行了排序,对不想得到的n-K个数 ...
- Java实现寻找最小的k个数
1 问题描述 有n个整数,请找出其中最小的k个数,要求时间复杂度尽可能低. 2 解决方案 2.1 全部排序法 先对这n个整数进行快速排序,在依次输出前k个数. package com.liuzhen. ...
- 寻找最大的K个数(上)
这是一道很经典的题目,有太多方法了,今天写了两种方法,分别是快排和堆排序 1 #include <iostream> 2 using namespace std; 3 #define N ...
- java第k大的数字,JAVA中寻找最大的K个数解法
这个题拿到之后首先会想到排序,排好序之后在选取选取最大的K个数.排序选择快速排序是个比较好的选择. 好了,让我们来进行第一个解法:快速排序 代码如下 复制代码代码如下: public static v ...
最新文章
- Java黑皮书课后题第4章:*4.2(几何:最大圆距离)最大圆面积是指球面上两个点间的距离。编写一个程序,提示用户以度为单位输入地球上两个点的经纬度,显示其最大圆距离值
- mysql5.7下载及详细安装教程_MySQL 5.7 下载及安装教程(详细)
- Python编程常见问题与解答
- 详解Python序列解包(3)
- MSSQLSERVER查询分析器连接的方法
- eureka server启动后端口变为8080问题解决
- 就问你慌不慌:每天都有 一百万 程序员在投简历
- CHAPTER 28 VMX SUPPORT FOR ADDRESS TRANSLATION
- yum安装python3
- 位图和矢量图转换工具推荐
- html网页文档无法复制粘贴图片,教你处理不能复制粘贴在网页中的详细图文
- 成都市计算机会考,四川省高中信息技术会考资料及试题
- python学而思和猿辅导哪个好_学而思和猿辅导哪个好,说说我的评价
- Discuz安装短信宝短信插件教程
- 那些好玩的生成器网站(二)
- 辗转相除法——求最大公约数
- 低通滤波器 截止频率 学习笔记
- Go开发 之 设计模式
- 加拿大移民政策调整,注意,这些可能会影响到你
- c++新手入门(不定时更新,已肝18500字)
热门文章
- MyBatis-05 MyBatis XML方式之update/delete元素
- Snackbar-Android M新控件
- TextInputLayout-Android M新控件
- 学习笔记——itertools模块
- java 枚举类型的使用_JAVA 枚举类型使用
- python大于等于怎么表示_如何在rejectdb中应用python lambda表达式中的大于等于
- excel 复制数据 sql server 粘贴_数据资料复制粘贴麻烦?教你硬盘对拷资料
- Java实现反向输出链表
- inner join和left join还有right join的区别
- 大众EA211djs和css的区别,宣传上却说捷达VS5用的发动机是EA211,但这款车的参数配置栏发动机型号写的却是DJS,谁能为我解惑吗?(只有斯柯达的柯米克的发动机型号写得才是EA211)...