タイトル
入力[nは整数、最小数Kを見つけます。4,5,1,6,2,7,3,8例えば8つのデジタル入力、最小番号]、3、4 4
方法1:並べ替え
前者の要件を満たすアレイ、及びk値をソートするために直接。しかし、この方法では、ときにデータの多くは、非効率的。
コード:
class Solution {
public:
vector<int> res;
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
res.clear();
if(input.empty() || input.size()<k)
{
return res;
}
sort(input.begin(),input.end());
for(int i=0;i<k;++i)
{
res.push_back(input[i]);
}
return res;
}
};
方法2:最大スタック
1、解析:
第一の容器を作成するには、第一容器への入力の前にk個の要素、k値を置くことができます。次いで、要素の後のk + 1は、容器内の要素に匹敵します。容器は、最大値よりも大きい場合、入力は破棄され、以下容器の最大値よりも、それが容器の最大値に置き換えられている場合。
メモリにロードされ、入力されたデータの塊、それは大きな利点を持っていたら、このメソッドは、すべてのデータを必要としません。
2、コード:
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
int len=input.size();
// 注意处理意外情况
if(len<=0 || k<=0 ||k>len)
return vector<int>();
//将input容器中的前k个元素存入一个新容器中
vector<int> res(input.begin(),input.begin()+k);
//创建堆
make_heap(res.begin(),res.end());
for(int i=k;i<len;++i)
{
//如果堆中的最大值大于输入容器中的值,则将其进行替换
if(res.front()>input[i])
{
pop_heap(res.begin(),res.end());
res.pop_back();
res.push_back(input[i]);
push_heap(res.begin(),res.end());
}
}
sort_heap(res.begin(),res.end());
return res;
}
};