由于题目未对复杂度做要求,所以采取简单粗暴的直接法,将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];
        }
    }
};