合并两个有序数组
题目要求
给你两个有序整数数组nums1和nums2,要求把nums2中的整数合并到nums1中,并且使nums1也是一个有序数组。
思路
为了使空间复杂度最小,我们不能创建新的数组,我们需要直接放到nums1中,考虑到时间复杂度也要尽可能的小,我们可以将两个数组中的元素进行比较,小的放在nums1中下标小的位置,但是考虑到这样会覆盖原本在nums1中的值,我们假设nums1中的大小刚好能够放下两个数组中所有的元素,这时我们就可以从后往前进行排放,也就是说两个数组中的元素进行比较,较大的那个元素放在nums1数组的末尾,进行逆填充,直到把数组填满。
代码实现
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){int p = m + n - 1;int p1 = m - 1;int p2 = n - 1;while (p1 >= 0 && p2 >= 0){if (nums1[p1] >= nums2[p2]){nums1[p] = nums1[p1];p1--;}else{nums1[p] = nums2[p2];p2--;}p--;}if (p1 == -1){while (p2 >= 0){nums1[p] = nums2[p2];p2--;p--;}}
}