力扣第88题

题目描述:给你两个有序数组nums1和nums2,请你将nums2合并到nums1中,使得nums1成为一个有序数组。

说明:初始化nums1和nums2de元素数量分别为m和n。你可以假设nums1有足够的空间(大于等于m+n)来保存nums2中的元素。

eg: nums1={1,2,3,0,0,0} m=3
nums2={2,5,6} n=3
合并后:nums1={1,2,2,3,5,6}

解题思路:从后往前的双指针
取指针p1指向nums1的末尾元素,p2指向nums2的末尾元组,在每一步将最大的值添加到在数组nums1的末尾,p用来追踪添加元素的位置,最后将nums2中剩余的元素粘贴到nums1的前面。

题目难点:
①:数组的排序、删除问题一般要想到双指针,要想到用一个指针指向 题目要求的数组。
②:从后往前进行排序时,不需要额外的空间。
③:若nums2中有剩余元素,需将剩余元素粘贴到nums1中。

void merge(int* nums1, int nums1Size,int m, int* nums2, int nums2Size, int n) {
    int p1 = m - 1;
    int p2 = n - 1;
    int p = m + n - 1;
    while (p1 >= 0 && p2 >= 0)
    
{//compare two elements from nums1 and nums2
//and add the larger to nums1
Nums1[p--]=(num1[p1]>nums2[p2])?
Nums[p1--]:nums[p2--];
     }
    while (p2 >= 0)     
nums1[p--] = nums2[p2--];//将nums2中剩余元素粘贴到nums1的前面

文末小彩蛋
这里是小巨鹿的的代码小天地(●’◡’●),希望看到我小小笔记的同学一起加油哦~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值