题目十二:
合并两个排序的整数数组A和B变成一个新的数组。
样例
给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]
代码:
class Solution {
public:
/*
* @param A: sorted integer array A
* @param B: sorted integer array B
* @return: A new sorted integer array
*/
vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) {
// write your code here
int length1,length2;
int i,flag = 0;
vector<int>::iterator j;
length1 = A.size();
length2 = B.size();
if(length2<length1)
{
swap(A,B);//A向B中插入,如果A的长度大于B,两者交换
length1 = A.size();
}
for(i = 0;i<length1;i++)
{
if(flag == 0)
{
for(j = B.begin();j<B.end();j++)
{
if(A[i]<= *j)
{
B.insert(j,A[i]);
break;
}
}
if(j == B.end())
{
B.insert(B.end(),A[i]);
flag = 1;
}
}
else
{
B.insert(B.end(),A[i]);
}
}
return B;
}
};
这道题目的思路不难,但是由于对vector不熟悉,我还是用了将近两个小时才做出来,蓝瘦。考虑一个数组比尽但是另一个数组还剩余的情况。对于一个数组容量很大,另一个数组容量很小,我的处理方式是始终把容量小的插入容量大的数组中。用swap()函数交换两个数组。
下面是我使用vector出现的问题:
1、vector<int>::iterator j,这里的j变量类似指针,获得j所指数据时直接用*j即可,我用了B[j]来访问
2、insert(j,A[i])函数前一个参数是vector<int>::iterator j类型的,后一个是int型变量,我把int型计数器作为第一个变量传进去了,其次就是在调用insert()函数以后,j的指向已经丢失,不能继续使用,我测试的时候输出*j是一堆乱码,所以得到这个结论,所以我第二层循环每次都是从起始位置开始遍历。