描述
合并两个有序升序的整数数组A和B变成一个新的数组。新数组也要有序。
例如int a[] = {1,2,3,4},int b[] ={2,4,5,6}
合并后的结果为[1,2,2,3,4,4,5,6]
方法一:直接比较两个vector中的所有元素
vector<int> mergeSortedArray(vector<int> &A, vector<int> &B)
{
vector<int> result_vec;
if (A.empty())
{
return B;
}
if (B.empty())
{
return A;
}
size_t size_A = A.size();
size_t size_B = B.size();
int i = 0;
int j = 0;
while (i < size_A || j < size_B)
{
if (i == size_A)
{
//后置++,用完后再+
result_vec.push_back(B[j++]);
continue;
}
else if (j == size_B)
{
result_vec.push_back(A[i++]);
continue;
}
else
{
if (A[i] < B[j])
{
result_vec.push_back(A[i++]);
}
else
{
result_vec.push_back(B[j++]);
}
}
}
return result_vec;
}
方法二:使用容器完成自动排序
multiset容器允许存在重复元素且默认按小到大(针对int类型)的顺序排序,故可以使用该容器进行排序操作。
vector<int> mergeSortedArray(vector<int> &A, vector<int> &B)
{
//定义mutilset容器
multiset<int> ms;
vector<int> result_vec;
//将A中的元素插入ms中
for (auto i : A)
{
ms.insert(i);
}
//将B中的元素插入ms中
for (auto j : B)
{
ms.insert(j);
}
//将排序好的ms存入result_vec中
for (auto k : ms)
{
result_vec.push_back(k);
}
return result_vec;
}
方法三:直接在另一个vector中进行插入
使用find_if查找满足要求的元素位置,使用insert在其之前插入待插入元素。
vector<int> mergeSortedArray(vector<int> &A, vector<int> &B)
{
size_t size_A = A.size();
vector<int>::iterator it = B.begin();
for (int i = 0; i < size_A; ++i)
{
int number = A[i];
vector<int>::iterator it_end = B.end();
//find_if寻找第一个满足要求的元素,并返回其迭代器
//find_if接受三个参数,前两个表示寻找的范围,第三个为谓词(lambda表达式),表示返回第一个大于等于number的元素位置
it = find_if(it, it_end, [=](const int& count) {return count >= number;});
//insert会在迭代器it之前插入number
it = B.insert(it, number);
}
return B;
}