给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 num1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
Problem:
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 num1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
@author Gallery
*/
#include <stdio.h>
#include <stdlib.h>
/**
思路一:分别两个指针p,q,遍历两个数组数组。若num1[p]> num[q],则将num2数据插入num1,num1中数据后移.。。。。。复杂度过高
思路二:新建辅助数组newArr,用于按序存储,最后将newArr数据存回题目要求数组num1 并且释放内存;
*/
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
///为了简化操作初始化一个新数组
int * newArr = (int *)malloc(nums1Size*sizeof(int));
int length = 0;
int i=0,j=0,k=0;
for(; i < nums1Size;)
{
while(j<m&&k<n)
{
if(nums1[j] < nums2[k])
{
newArr[i++] = nums1[j++];
}
else
{
newArr[i++] = nums2[k++];
}
}
while(j<m)
{
newArr[i++] = nums1[j++];
}
while(k<n)
{
newArr[i++] = nums2[k++];
}
break;
}
for(j=0; j<i;j++)
{
nums1[j] =newArr[j];
printf("%d\t",nums1[j]);
}
free(newArr);
}
int main(void)
{
///根据测试数据设定0为无效数据
int num[] = {1,2,3,0,0,0};
int num1[] = {2,5,6};
int m=3,n=3;
merge(num,6,m,num1,3,n);
return 0;
}