合并两个有序数组
给定两个有序数组nums1和nums2,将nums2合并到nums1中,是的nums1成为有序数组
说明:
1、初始化nums1和nums2的元素数量分别为m和n
2、可以假设nums1有足够的空间(空间大小大于或等于n+m),来保存nums2中的元素。
方法1:合并后排序
时间复杂度: O((n+m)+log(n+m))
空间复杂度: O(1)
int cmp(int* a, int* b)
{
return *a - *b;
}
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
for (int i = 0; i != n; i++)
{
nums1[m + i] = nums2[i];
}
qsort(nums1, nums1Size, 4, cmp);
}
方法2:双指针/从前往后
时间复杂度: O(n+m)
空间复杂度: O(m)
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int p1 = 0,p2 = 0;
int arr[m+n];
int tmp;
while(p1 < m || p2 < n)
{
if(p1 == m)
{
tmp = nums2[p2++];
}
else if(p2 == n)
{
tmp = nums1[p1++];
}
else if(nums1[p1]<nums2[p2])
{
tmp = nums1[p1++];
}
else
{
tmp = nums2[p2++];
}
arr[p1+p2-1] = tmp;
}
for(int i = 0;i != m+n;i++)
{
nums1[i] = arr[i];
}
}