LeetCode 88. Merge Sorted Array

来源:互联网 发布:房产中介软件xiazaiba 编辑:程序博客网 时间:2024/05/18 04:04

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--];        }    }};


原创粉丝点击