数据结构入门(88. 合并两个有序数组)


一、逆序双指针

  • 因为要将nums2的元素插入nums1,如果按顺序插入就有可能覆盖掉nums1的元素,因此采用逆序的方式插入。
  • 创建两个指针p1和p2,分别指向nums1和nums2需要合并数组的末尾。
  • 创建一个指针a指向nums1的末尾,比较nums1[p1]和nums2[p2]的大小,把较大的数存入nums1[a],然后a–,nums1[p1]和nums2[p2]中较大元素的指针减一。

二、视频介绍

88. 合并两个有序数组

三、代码

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int a = nums1.size() - 1;
        int p1 = m - 1; //指向nums1需要合并数组的末尾
        int p2 = n - 1; //指向nums2需要合并数组的末尾
        while (a >= 0)
        {
            if (p1 == -1)
            {
                nums1[a--] = nums2[p2--]; //如果nums1需要合并的数组已经完成合并,就把nums2剩余需要合并的数组都赋给nums1
            }
            else if (p2 == -1)
            {
                nums1[a--] = nums1[p1--];//如果nums2需要合并的数组已经完成合并,就把nums1剩余需要合并的数组都赋给nums1
            }
            else
            {
                nums1[a--] = nums1[p1] >= nums2[p2] ? nums1[p1--] : nums2[p2--];  //将nums1[p1]和nums2[p2]中较大的赋给nums1[a],较大的元素的指针指向前一个元素,同时a也指向前一个元素
            }
        }
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值