有 n 个无序整数,则找出其中最大的 M 个数字所需要的最小时间复杂度:

原创 2018年04月15日 14:40:02

有 n 个无序整数( n>10000), 则找出其中最大的 M 个数字(5< M<10), 所需要的最小时间复杂度:


看了很多博客和论坛,这道题我找到了两种方法,在这里总结一下。

两种方法都用到了堆排序,那么首先回顾一下堆排序:

堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序. 

第一种算法:
直接对n个数进行堆排序,每次建立一个大根堆,只需完成排序的前m次。这种的方法时间复杂度是O(mlogn),每建立一次大根堆需要 logn 的时间,总共m次。

第二种算法:
最开始选取前m个数,用这m个数建立一个小根堆。接下来,对后面n-m个数进行遍历,用根结点与这n-m个数进行比较,当发现一个数比根结点大时,交换,然后重新建立一个小根堆。最终我们可以得到m个最大的数字。这种方法的时间复杂度是O(nlogm).

有 n 个无序整数( n>10000), 则找出其中最大的 M 个数字( 5<M<10), 所需要的最小时间复杂度为:

创建一个大小为M的容器来存储最小的M个数字。每次读入一个数字x,如果容器未满,则直接把x放入容器之中;如果容器已满,则找出容器中最大的数字MAX,如果x小于MAX,则用x替换MAX,否则抛弃x。 ...
  • swl1993831
  • swl1993831
  • 2017-09-23 11:02:14
  • 109

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

解题思路: 1、最简单方法,先排序,再取前k个,时间复杂度O(NlogN) class Solution { public: vector GetLeastNumbers_Solution...
  • u013113231
  • u013113231
  • 2017-02-24 22:03:34
  • 626

无序序列中O(n)时间复杂度寻找最小(最大)的K个数

一、快速排序,平均复杂度为n*logn 二、维护K个最小(最大)堆,平均复杂度为n*logK 三、类似快排的划分方法...
  • yueqian_zhu
  • yueqian_zhu
  • 2014-11-26 19:33:10
  • 2401

找到数组中未出现的最小整数

题目: 给定一个无序整型数组arr,找到数组中未出现的最小整数 例子arr=[-1,2,3,4] return 1 arr=[1,2,3,4] return 5时间复杂度O(n) 空间复杂度O...
  • qq_26437925
  • qq_26437925
  • 2016-09-22 12:20:09
  • 1262

从长度为M的无序数组中找出N个最大的数

1、将数组前N个数调整成最小堆 2、堆顶元素值依次与第N个元素以后的每个元素进行比较 3、若堆顶元素值小,则将堆顶元素重新赋值为新元素的值,并且将前N个数重新调整为最小堆;否则判断下一个元素 4...
  • mashuangwe
  • mashuangwe
  • 2017-08-08 21:26:12
  • 269

查找最小的k个元素(笔试题) 输入n个整数,输出其中最小的k个。 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4

查找最小的k个元素(笔试题) 输入n个整数,输出其中最小的k个。 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4 #include int main(...
  • qq_38365745
  • qq_38365745
  • 2017-05-10 23:26:35
  • 435

输入n个整数,找出其中最小的K个数

 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 import java.util.ArrayList...
  • csulfy
  • csulfy
  • 2016-11-23 10:32:36
  • 895

java实现输入n个整数,找出其中最小的K个数

package Nowcode; import java.util.ArrayList; /** * 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小...
  • pomay
  • pomay
  • 2017-06-06 11:27:11
  • 1430

剑指offer_输入n个整数,找出其中最小的K个数

最小的K个数 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 本题无非就是排序,取前...
  • lingongheng
  • lingongheng
  • 2016-10-04 20:52:46
  • 1671

找出n个数中最小的k个数

输入n个整数,找出其中最小的K个数。
  • guitarhensom
  • guitarhensom
  • 2017-02-27 22:50:43
  • 312
收藏助手
不良信息举报
您举报文章:有 n 个无序整数,则找出其中最大的 M 个数字所需要的最小时间复杂度:
举报原因:
原因补充:

(最多只允许输入30个字)