给你两个有序整数数组 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;
}