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