Leetcode 88.合并两个有序数组

Leetcode 88.合并两个有序数组

题目描述

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。

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

示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]

解题思路

合并两个有序的数组,并把nums2放入nums1中,一种解题思路是逐个的比较每个数组中的元素,这里由于是本地修改,所以需要做特殊处理,即nums1中的元素与nums2中的元素想比较的时候,由于nums1中的元素在不断的修改,需要使用nums1Index+nums2Index作为下标与nums2对应的nums2Index位置的元素做比较,做个图说明一下

在这里插入图片描述

代码如下:

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int nums1Index = 0;
        int nums2Index = 0;
         while (nums1Index < m && nums2Index < n){
             // 逐个的比较两个数组中的元素
            if (nums1[nums1Index+nums2Index] <= nums2[nums2Index]){ 
                nums1Index++;  // nums1中的元素比较小的时候,下标向后移动
            }
            else{
                // 当nums2中的元素比较小的时候,需要把nums1当前下标位置的元素整体向后移动
                for(int i = m+n-1; i>nums1Index+nums2Index; i--){
                    nums1[i] = nums1[i-1];
                }
                nums1[nums1Index+nums2Index] = nums2[nums2Index]; 
                nums2Index++;
            }
            
        }
        // 如果nums2有剩余,剩余的元素肯定比nums1中的元素都要大,直接追加在尾部
        if (nums2Index != n){
            for(int i=nums2Index; i<n; i++){
                nums1[nums1Index+i] = nums2[i];
            }
        }
    }
};

欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分享技术问题,我们一起学习进步在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值