題目描述:
輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,
C++
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
void merge(int input[] , int start , int mid ,int end){
int temp[end - start + 10] , len = start;
int i = start , j = mid + 1;
for( ; i <= mid && j <= end;){
if(input[i] > input[j]){
temp[len++]=input[j];
j++;
}else{
temp[len++]=input[i];
i++;
}
}
while(i<=mid){
temp[len++]=input[i];
i++;
}
while(j <= end){
temp[len++]=input[j];
j++;
}
for(int i = start;i <= end;i++){
input[i]=temp[i];
}
}
void mergeSort(int input[] , int start , int end){
if(start >= end){
return ;
}
int mid = start + (end - start) / 2;
mergeSort(input , start , mid);
mergeSort(input , mid + 1 , end);
merge(input , start , mid , end);
}
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
if(k > input.size()){
input.clear();
return input;
}
int arr[input.size()+10];
int len =0;
for(vector<int>::iterator it = input.begin() ;it != input.end();it++){
arr[len] = *it;
len++;
}
mergeSort(arr , 0 , len - 1);
input.clear();
for(int i = 0;i < k;i++){
input.push_back(arr[i]);
}
return input;
}
};
int main(){
vector<int> v;
int n , k;
Solution s;
while(cin >> n >> k){
int temp;
for(int i = 0;i < n;i++){
cin >> temp;
v.push_back(temp);
}
v = s.GetLeastNumbers_Solution(v , k);
for(vector<int>::iterator it = v.begin() ;it != v.end();it++){
cout << *it << " ";
}
cout << endl;
}
return 0;
}