C++学习之第十一天-合并两个有序数组

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

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

/*归并排序思想*/
#include <iostream>
#include <vector>
using namespace std;
void PrintArray(vector<int>&num1) //打印
{

    for(vector<int>::iterator it=num1.begin();it!=num1.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
class Solution
{
public:
    void merge2Array(vector<int>&num1, int m, vector<int>&num2, int n)
    {
        vector<int> temp;
        temp.reserve(m);//创建一个临时数组,存储num1的内容,用于和num2数组进行比较
        //reserve(m):vector容器预留m个空间
        for(int i=0;i<m;i++)
        {
            temp.push_back(num1[i]);
        }
            
        //PrintArray(temp);
        num1.resize(m+n);//给num1扩容
        int k = 0;
        int i =0;
        int j =0;
        while(i<m && j<n)//归并排序思想
        {
            if(temp[i]<num2[j])
            {
                num1[k++] = temp[i++];
            }
            else
            {
                num1[k++] = num2[j++];
            }
        }
        while(i<m)
        {
            num1[k++] = temp[i++];
        }
        while(j<n)
        {
            num1[k++] = num2[j++];
        }
    }
};
void test01()
{
    vector<int>num1={1,3,5,7,9,19};
    vector<int>num2={3,6,8,12,14};
    Solution s1;
    PrintArray(num1);
    PrintArray(num2);
    
    s1.merge2Array(num1,num1.size(),num2,num2.size());//数组归并
    PrintArray(num1);//打印归并后的数组

    vector<int>num3={1};
    vector<int>num4;
    
    s1.merge2Array(num3,num3.size(),num4,num4.size());
    PrintArray(num3);

}
int main()
{
    test01();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_49278191/article/details/121229509