minimum number of k red-black Tree codes (c + +)
This address: Http://blog.csdn.net/caroline_wendy
Title: Enter n integers to find out the minimum number of K.
Using a red-black Tree (multiset), replace the maximum value each time, iterating in turn.
Time complexity: O (NLOGK).
Code:
/* * main.cpp * * Created on:2014 June 29 * Author:wang * * #include <iostream> #include <vector> #include & lt;algorithm> #include <iterator> #include <set>using namespace std;void getleastnumbers (const vector <int>& data,multiset<int, greater<int> >& leastnumbers,std::size_t k) {leastnumbers.clear ( ) if (K < 1 | | data.size () < K) Return;for (Vector<int>::const_iterator iter = Data.begin (); ITER! = Data.end (); ++iter) {if (Leastnumbers.size () < K) {Leastnumbers.insert (*iter);} else {multiset<int, greater<int>;:: Iterator itergreatest = Leastnumbers.begin (), if (*iter < *itergreatest) {leastnumbers.erase (itergreatest); Leastnumbers.insert (*iter);}}} int main (void) {vector<int> input = {4, 5, 1, 6, 2, 7, 3, 8}; Multiset<int, greater<int> > output; Getleastnumbers (input, output, 4); Std::copy (Output.begin (), Output.end (), std::ostream_iterator<int> (Std::cout, "")); Std::coUT << Std::endl; return 0;}
Output:
Programming algorithms-Minimum number of k red-black Tree codes (c + +)