解题思想:由于2个数组已经是排序的性质,可以使用2个指针分别指向2个数组,两两比较小数放到新的数组里同时指针向后移动一位,如果是相同,那么2个指针都向后移动1位
参数描述:
num1、num2位数组
nums1Size、nums2Size为数组个数
m、n为有效值个数
ps:因为最后的值要放倒nums1中,所以nums1内存能放的个数需要=m+n才行。
int merge_arr(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
int p1 = 0, p2 = 0;
int len = m + n;
int *sorted = new int(len);
int cur;
int i = 0;
while (p1 < m || p2 < n) {
if (p1 == m) {
cur = nums2[p2++];
}
else if (p2 == n) {
cur = nums1[p1++];
}
else if (nums1[p1] < nums2[p2]) {
cur = nums1[p1++];
}
else if (nums1[p1] == nums2[p2]) {
cur = nums1[p1++];
len--;
p2++;
}
else {
cur = nums2[p2++];
}
sorted[i++] = cur;
}
for (int i = 0; i != len; ++i) {
nums1[i] = sorted[i];
}
return len;
}
int main()
{
int len = 0;
int arr[] = { 1,2,3,0,0,0,0};
int arr2[] = { 2,3,6,7 };
len = merge_arr(arr,7,3,arr2,4,4);
for(int i = 0; i < len; i++)
printf("%d \n",arr[i]);
return 0;
}