题意
就归并排序的归并:给定两个数组1和2,将2归并到1。
思路
如果新开空间的话还是很好做的,但是既然说了1的大小可以容纳下2,我们就考虑把2归并到1里面。
开始是想法是两个数组都从第一个元素开始归并,但是存在这样一个问题:会覆盖掉1里面的元素= =。
其实从两个数组的最后一个元素开始归并,因为1的后面是空出来的,因此,我们从m + n - 1的位置开始放元素,可以保证元素不会被覆盖掉。
代码
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int k = m + n - 1, i = m - 1, j = n - 1;
while (i >= 0 && j >= 0) {
if (nums1[i] > nums2[j]) nums1[k--] = nums1[i--];
else nums1[k--] = nums2[j--];
}
while (j >= 0) nums1[k--] = nums2[j--];
}
};