Leetcode-88.合并俩个有序数组

基本思路

1.开启块空间出来,用于临时存放数据

2.从下标0处开始比较俩个数组的元素,如果nums1当前下标元素比nums2当前下标元素小,就把nums1的当前下标元素放到开辟的空间中去并且num1的当前下标加1和指向开辟出来的临时空间下标加1,反之也是如此。

3.最后可能要进行末尾处理,可能 nums1的元素没处理完,nums2的元素已经处理好了,此时元素没处理完的数组直接拷贝到临时空间的末尾就好了

动图如下

代码如下



void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
    int * ret = (int *)malloc(sizeof(int) * (n + m));
    int num1_targ = 0;
    int num2_targ = 0;
    int ret_targ = 0;
    while(num1_targ < m && num2_targ < n)
    {
        if(nums1[num1_targ] <= nums2[num2_targ])
        {
            ret[ret_targ++] = nums1[num1_targ];
            num1_targ++;
        }
        else
        {
            ret[ret_targ++] = nums2[num2_targ];
            num2_targ++;
        }
    }
    //末尾处理
    if(num1_targ >= m)
    {
        while(num2_targ < n)
        {
            ret[ret_targ++] = nums2[num2_targ];
            num2_targ++;           
        }
    }
    else if(num2_targ >= n)
    {
        while(num1_targ < m)
        {
            ret[ret_targ++] = nums1[num1_targ];
            num1_targ++;         
        }
    }
    memcpy(nums1,ret,sizeof(int) * (m + n));

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值