合并两个有序数组

力扣链接:https://leetcode.cn/problems/merge-sorted-array/

题目

给你两个按非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n,分别表示 nums1 和 nums2 中的元素数目。

请你合并 nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。

思路

假设 nums1 = [1, 2, 3, 0, 0, 0], m = 3, nums2 = [2, 5, 6], n = 3

定义两个整型,代表下标
在这里插入图片描述
end2 > end1,把 end2 赋给 end,end2 前移,end 前移
在这里插入图片描述
在这里插入图片描述
end2 > end1,把 end2 赋给 end,end2 前移,end 前移
在这里插入图片描述
在这里插入图片描述
end1 > end2,把 end1 赋给 end,end1 前移,end 前移
在这里插入图片描述
在这里插入图片描述
end1 == end2,把 end2 赋值给 end(把 end1 赋给 end 也可以),end2 前移,end 前移
在这里插入图片描述
在这里插入图片描述
end2 < 0,结束

假如 end1 先结束,那就直接把 nums2 剩余的元素放到 end 处

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
    int end1 = m - 1;
    int end2 = n - 1;
    int end = m + n -1;
    while(end1 >= 0 && end2 >= 0)
    {
        if(*(nums1 + end1) > *(nums2 + end2))
            nums1[end--] = nums1[end1--];
        else
            nums1[end--] = nums2[end2--];
    }
    while(end2 >= 0)
    {
        nums1[end--] = nums2[end2--];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值