LeetCode 88. 合并两个有序数组

一、题目描述:

具体题目就是为了实现两个数组的有序合并,我们采取三指针做法来解决这个问题:

二、题目分析:

对于题目中给定的变量再次说明numsSize我自己没有用到,所以下面的题目思路将不会出现numsSize

假设有两个数组nums1 , nums2:

因为题目中说了nums1的长度就是m+n的长度,所以我们定义三个变量end1 , end2 , end

我们想要将两个数组中的数进行有序合并的话,那就要将nums2的最大值(位于end2处)与nums1(位于end1处)的最大值进行比较

如果nums2的最大值比较大,那就将nums2的最大值放到nums1的end的位置

如果nums1的最大值比较大,那就将nums1的最大值放到nums1的end的位置

每次放置完了之后,nums1/nums2的位置都要往前挪动一位进行下一轮比较

还有两种情况我们应该了解:

当nums2里面的数值要是有剩余的,那就直接把它们传递到num1相同的位置

代码如下:

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
    int end = m + n - 1;        //nums1的end的位置
    int end2 = n - 1;        //nums2的end2的位置
    int end1 = m - 1;     //nums1的end1的位置
    while(end1 >= 0 && end2 >= 0){             //当end1或者end2一旦遍历完的时候,说明另一个数组就还剩有元素
        if(nums1[end1] > nums2[end2]){     //如果nums1的最大值比nums2的最大值大的话,就将nums1的最大值放在nums1的最后的位置
            nums1[end] = nums1[end1];
            end--;
            end1--;
        }else{
            nums1[end] = nums2[end2];
            end--;
            end2--;
        }
    } 
    while(end2 >= 0){         //当nums2的元素还有剩余的时候,就直接按照顺序传递到nums1的数组的最前部
        nums1[end] = nums2[end2];
        end--;
        end2--;
    }
}

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值