한 무더기 의 데이터 중 가장 크 거나 가장 작은 K 개 수 를 찾아내다
가장 큰 K 개 수 를 찾 는 방법 은 K 개의 수가 있 는 가장 작은 무 더 기 를 만 드 는 것 이다.
#include <iostream>
#include <vector>
#include <set>
using namespace std;
typedef multiset< int,less<int> > INTHEAP;
void FindGreatestNum(vector<int>& iArray, const unsigned int num, INTHEAP& pRes)
{
pRes.clear();
if(iArray.empty() || num <= 0)
{
return;
}
vector<int>::iterator iter = iArray.begin();
while(iter != iArray.end())
{
if(pRes.size() < num)
{
pRes.insert(*iter);
}
else
{
INTHEAP::iterator pIter = pRes.begin();
if(*iter > *pIter)
{
pRes.erase(pIter);
pRes.insert(*iter);
}
}
iter ++;
}
}
int main()
{
int iArray[] = {1,6,9,0,2,8,12,77,90,54,78,92,23,34,56,76,91};
int len = sizeof( iArray ) / sizeof( int );
const unsigned int num = 7;
vector<int> nArray(iArray, iArray + len);
INTHEAP pRes;
FindGreatestNum(nArray, num, pRes);
INTHEAP::iterator iter = pRes.begin();
while(iter != pRes.end())
{
cout<<*iter<<" ";
iter ++;
}
cout<<endl;
return 0;
}
동 리: 가장 작은 K 개 수 를 찾 는 방법 은 K 개의 수가 있 는 가장 큰 무 더 기 를 만 드 는 것 이다.
#include <iostream>
#include <set>
#include <vector>
using namespace std;
typedef multiset<int, greater < int > > intHeap;
void FindKLeastNumbers(vector< int >& iArray,const unsigned int num,intHeap& pResult)
{
pResult.clear();
if(iArray.empty() || num <= 0)
{
return;
}
for(vector<int>::iterator iter = iArray.begin(); iter != iArray.end(); iter ++)
{
if(pResult.size() < num)
{
pResult.insert(*iter);
}
else
{
multiset<int, greater<int> >::iterator pIter = pResult.begin();
if(*iter < *(pResult.begin()))
{
pResult.erase(pIter);
pResult.insert(*iter);
}
}
}
}
int main()
{
int iArray[] = {1,9,7,8,5,3,9,4,2};
int len = sizeof( iArray ) / sizeof( int );
vector< int > nArray(iArray, iArray + len);
const unsigned int num = 4;
intHeap pResult;
FindKLeastNumbers(nArray, num, pResult);
multiset<int, greater<int> >::iterator iter = pResult.begin();
while(iter != pResult.end())
{
cout<<*iter<<" ";
iter ++;
}
cout<<endl;
return 0;
}
소결: STL 과 관련 된 지식 을 배 우 는 것 을 통 해 이것 은 아주 좋 은 라 이브 러 리 이 고 좋 은 데이터 구 조 를 가 지 며 운영 효율 도 비교적 높 기 때문에 안에서 파악 해 야 할 중요 한 기술 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.