leetcode Merge Sorted Array

本文介绍了一种高效的数组合并方法,通过从后向前比较两个已排序数组的元素,将较大值插入目标数组的末尾,实现两数组的有序合并,显著提升了算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

解题思路:

输入已排序好的nums1和nums2数组,将nums2中的数据插入到nums1中。如果从小到大遍历(从数组下由小到大遍历),当nums2的数据插入到nums1时会覆盖nums1中原有位置的数据,从而丢失了此数据,此种做法不可行。

我们可以换种角度看问题。将标记位定位到nums1和nums2中数字的末位。将从大数开始比较,若nums1[m-1]比nums2[n-1]小,则将nums2[n-1]插入到nums1[n+m-1](nums1数组的最后位置),否则将nums1[n-1]插入到nums1[n+m-1](nums1数组的最后位置),依次往前遍历。当nums1或nums2中的数据遍历完了,则跳出循环。如果某个数组中还有多于的数字没有插入,则将剩余数字覆盖nums1中前面部分的数字。最后打败了99.48%,可能是因为跳出循环后,nums2中的数字全部插入,nums1中还有部分没有插入,则不需要做覆盖操作。

源码附上:

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int temp1=m-1,temp2=n-1,temp=m+n-1;
        while(temp1>=0&&temp2>=0)
        {
            if(nums1[temp1]<nums2[temp2])
                nums1[temp--]=nums2[temp2--];
            else
                nums1[temp--]=nums1[temp1--];
        }
        while(temp1>=0)
        {
            nums1[temp--]=nums1[temp1--];
        }
        while(temp2>=0)
        {
            nums1[temp--]=nums2[temp2--];
        }
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值