查找最小的k个元素

萝らか妹 提交于 2020-02-25 07:59:29

算法中使用到了堆,即stl中的multiset。

 

#include <iostream>
#include <vector>
#include <set>
using namespace std;

typedef multiset<int, greater<int>> IntHeap;

void FindKLeastNumbers(
 const vector<int>& data,
 IntHeap& leastNumbers,
 unsigned int k)
{
 leastNumbers.clear();

 if (k==0||data.size()<k)
 {
  return;
 }

 vector<int>::const_iterator iter=data.begin();
 for (; iter!=data.end(); ++iter)
 {
  if (leastNumbers.size()<k)
  {
   leastNumbers.insert(*iter);
  }
  else
  {
   IntHeap::iterator iterFirst=leastNumbers.begin();
   if (*iter<*iterFirst)
   {
    leastNumbers.erase(iterFirst);
    leastNumbers.insert(*iter);
   }
  }
 }
}

int main()
{
 vector<int> data;
 data.push_back(7);
 data.push_back(2);
 data.push_back(8);
 data.push_back(1);
 data.push_back(5);
 data.push_back(3);
 data.push_back(6);
 data.push_back(-4);

 IntHeap leastNumbers;

 FindKLeastNumbers(data, leastNumbers, 4);

 IntHeap::iterator iter=leastNumbers.begin();
 for (; iter!=leastNumbers.end(); ++iter)
 {
  cout<<*iter<<'\t';
 }

 cout<<endl;

 return 0;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!