这道题目真的没什么可说的,就是一个归并排序的部分操作。想要了解原理可以查一下归并排序,简单来说就是挑两个数组中较小的一个插入数组中。
了解归并排序原理,这篇文章讲的比较好,分享过来推荐看一下:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
vector<int> copy;
int mptr=0;
int nptr=0;
for(int i=0;i<m;i++) copy.push_back(nums1[i]);
for(int i=0;i<m+n;i++){
if(nptr>n-1){
nums1[i]=copy[mptr];
mptr++;
}else if(mptr>m-1||copy[mptr]>nums2[nptr]){
nums1[i]=nums2[nptr];
nptr++;
}else{
nums1[i]=copy[mptr];
mptr++;
}
}
}
};
没做什么细节上的优化,同一段代码写了两遍,但是还是得到了100%的成绩。
LeetCode上的官方题解更是神来之笔,通过将两个数组从后往前进行比较,省去了复制数组nums1使用的额外时间和空间。