本文主要是介绍有 n 个无序整数( n10000), 则找出其中最大的 M 个数字( 5lt;Mlt;10), 所需要的最小时间复杂度为:,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第一种算法:
直接对n个数进行堆排序,每次建立一个大根堆,只需完成排序的前m次。这种的方法时间复杂度是O(mlogn),每建立一次大根堆需要 logn 的时间,总共m次。
第二种算法:
最开始选取前m个数,用这m个数建立一个小根堆。接下来,对后面n-m个数进行遍历,用根结点与这n-m个数进行比较,当发现一个数比根结点大时,交换,然后重新建立一个小根堆。最终我们可以得到m个最大的数字。这种方法的时间复杂度是O(nlogm).
这篇关于有 n 个无序整数( n10000), 则找出其中最大的 M 个数字( 5lt;Mlt;10), 所需要的最小时间复杂度为:的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!