有的时候想想懒得每次遇到类似问题就重新编代码,所以主要是为了保存代码,就重新记录一些简单题的解法。
问题:
给定一个无序系列包含有n个数,求其前m大数
算法:
1. 对该系列进行排序,然后取前m大的数。算法时间复杂度为O(nlogn)
2. 如果m比较小,对系列流有序保存前m大数,时间复杂度为O(mn)
3. 维持一个m个元素的最小堆,该堆保存的是前m大数,新添加的数只要跟该堆中最小数比较,若大则替换并调整堆,否则舍弃,时间复杂度为O(nlogm)
下面是一个简单练习题的三种算法C++代码:
题目(http://acm.hdu.edu.cn/showproblem.php?pid=3785)
//------------------------------------------------//--------------------解法1-----------------------
//------------------------------------------------
#include<iostream>
#include <algorithm>
usin