※ Leetcode - Array - 88. Merge Sorted Array(快速归并两个有序数组)

来源:互联网 发布:淘宝卖农产品赚钱吗 编辑:程序博客网 时间:2024/06/05 19:23

1. Problem Description

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.

 

高效归并两个有序数组。

2. My solution1 (另开空间从前往后)

从前往后合并,用两个指针分被指向两个数组当前最小元素,需要另开辟一个数组。

    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)    {        int It1=0,It2=0,It=0;        vector<int>res;        while(It<m+n)        {            if(It1<m&&It2<n)            {                if(nums1[It1]<=nums2[It2])                    res.push_back(nums1[It1++]);                else                    res.push_back(nums2[It2++]);                It++;            }            if(It1>=m)            {                while(It2<n)                    res.push_back(nums2[It2++]),It++;                break;            }            if(It2>=n)            {                while(It1<m)                  res.push_back(nums1[It1++]),It++;                break;            }        }        nums1.clear();        for(int i=0; i<m+n; i++)            nums1.push_back(res[i]);        res.clear();    }

3. My solution2in place归并,从后往前)

PS

有一组样例是

nums1={0},m=0;

nums2={1],n=1.

    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)    {        int It1=m-1,It2=n-1,It=m+n-1;        for(int i=0; i<n+m-nums1.size(); i++)//z1!!!!!样例中存在m比实际size小的情况!!!!!            nums1.push_back(0);        while(It>=0)        {            if(It1>=0&&It2>=0)            {                 if(nums1[It1]>=nums2[It2])                    nums1[It--]=nums1[It1--];                else                    nums1[It--]=nums2[It2--];            }            else if(It1<0)            {                while(It2>=0)                    nums1[It--]=nums2[It2--];                break;            }            else            {                while(It1>=0)                    nums1[It--]=nums1[It1--];                break;            }        }    }


0 0