由于题目未对复杂度做要求,所以采取简单粗暴的直接法,将B数组的值赋给A数据,然后对A数组进行冒泡排序。
若要进一步追求高效,则应采用归并排序。
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
vector<int> result;
if(input.size() == 0){
return result;
}
for(int i = 0;i < input.size()-1;i++){
for(int j = 0;j < input.size()-1-i;j++){
if(input.at(j)>input.at(j+1)){
int tmp = input.at(j);
input.at(j) = input.at(j+1);
input.at(j+1) = tmp;
}
}
}
for(int i = 0;i < k;i++){
result.push_back(input.at(i));
}
return result;
}
}; 当然,最正确的做法应该是采用归并排序。先创建一个大小为n+m的数组arr,用两个指针从A、B数组的起点开始,比较两个指针所指的值,将小的一方放入arr,并且移动指向该值的指针,直到一方的指针到达数组末尾,将另一数组剩余的数全部加入arr中,arr即为合并后数组。
代码如下。
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int a = 0;
int b = 0;
int re[m+n];
for(int i = 0;i < m+n;i++){
if(a == m){
re[i] = B[b];
b++;
continue;
}
if(b == n){
re[i] = A[a];
a++;
continue;
}
if(A[a]>=B[b]){
re[i] = B[b];
b++;
continue;
}
else{
re[i] = A[a];
a++;
continue;
}
}
for(int i = 0;i<n+m;i++){
A[i] = re[i];
}
}
}; 
京公网安备 11010502036488号