给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。
初始化 A 和 B 的元素数量分别为 m 和 n。
示例:
输入:
A = [1,2,3,8,0,0,0], m = 4
B = [2,5,6], n = 3
输出: [1,2,2,3,5,6,8]
迭代器故障,说是数组越界,不求甚解
class Solution {
public:
void merge(vector<int>& A, int m, vector<int>& B, int n) {
int len=A.capacity();
int a=0;
int b=0;
vector<int>::iterator ita=A.begin();
vector<int>::iterator itb=B.begin();
vector<int> tem(A);
vector<int>::iterator itc=tem.begin();
while(len--)
{
if(*ita<*itb) //先比较大小
{
a++; //设置标记,如果A遍历完了,就直接用B
if(a<=m)
{
*itc=*ita;
ita++;
}
else
{
*itc=*itb;
itb++; //相应迭代器也要更新
}
}
else
{
b++; //设置标记,如果B遍历完了,就直接遍历A
if(b<=n)
{
*itc=*itb;
itb++;
}
else
{
*itc=*ita;
ita++;
}
}
itc++;
}
ita=tem.begin();
for(vector<int>::iterator it=A.begin(); it!=A.end();it++)
{
*it=*ita;
ita++;
}
}
};
Line 784: Char 17: runtime error: reference binding to null pointer of type 'int' (stl_iterator.h)
此处撰写解题思路
while循环里边,1、先写把A,B,遍历完事的情况是啥,再写比较大小的情况,这个顺序,少些代码,
2、直接定义一个数,pa,pb,再赋值的时候就加进去
代码
class Solution {
public:
void merge(vector<int>& A, int m, vector<int>& B, int n) {
int len=A.size(); //capacity()也可以
int pa=0;
int pb=0;
int cur;
int arr[len];
while(pa<m||pb<n) //
{
if(pa==m) //顺序从后往前
cur=B[pb++]; //在里边直接更新
else if(pb==n)
cur=A[pa++];
else if(A[pa]<B[pb])
cur=A[pa++];
else
cur=B[pb++];
arr[pa+pb-1]=cur;
}
for(int i=0;i<len;i++) //重新回去
{
A[i]=arr[i];
}
}
};
来源:CSDN
作者:Tlwhisper
链接:https://blog.csdn.net/Tlwhisper/article/details/104626660