LeetCode 88. Merge Sorted Array

Merge Sorted Array


题目描述:

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.


题目大意:

给定两个数组nums1和nums2,已经从小到大排过序,现在让把nums2中的元素全部插入到nums1数组中。

  • 那么最直接的想法就是,依次拿出nums2中的元素,插入到nums1数组中。每次插入元素,都要遍历nums1数组来找到元素要插入到地方,不仅在判断位置上需要之前都元素比他小,之后的元素比他大。并且在插入元素后,还需要将插入位置之后的元素全部后移。很麻烦。
  • 那么如果我们用链表,因为每一个节点的元素有指向下一个元素的指针,这样的话插入元素的操作就简单的多了。但是题目中这个使用的容器是vector,这个思路也不行。

  • 要使nums2中的元素都插入到nums1数组中,那么nums1数组的size()就一定要放的下着么多元素。那么说明nums1最后一个位置是空的,并且nums2数组中有多少个元素,那么就需要多少个“空位置”。也就是说,我们定义两个指针指向两个数组的最后一个元素,比较元素的大小,较大的放到最后一个位置,并且移动指针。重复比较步骤即可。

  • 需要注意的是,如果最后nums1的指针已经移动到不能移动,即所有元素都用完。那么我们要将nums2剩下的元素全部放到nums1中。


题目代码:

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值