Merge two given sorted integer array A and B into a new sorted integer array.
Example
A=[1,2,3,4]
B=[2,4,5,6]
return [1,2,2,3,4,4,5,6]
Challenge
How can you optimize your algorithm if one array is very large and the other is very small?
合并两个排序的整数数组A和B变成一个新的数组。
样例
给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]
挑战
我将A和B的值都整合到数组c中,再将数组c中的值赋给vector<int> C,这样便可以返回c的结果。
2018/1/23
你能否优化你的算法,如果其中一个数组很大而另一个数组很小?
vector<int> A表示可以实现自动生长对象的动态数组,可以用A.size()来表示数组大小
这道题我采用了将数组的数值赋给vector的方法,即运用了vector<int> A(a, a+4);这种表示方法,表示从a数组的第一个开始一共四个值赋给vector<int> A 。
因为得出的结果是已经进行排序后的结果,所以我就边整合边排序,这样当一个数组完成时,直接将另一个数组整个到结果中就可以了。
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 i = 0, j = 0, k = 0;
int count = A.size() + B.size();
int c[count];
while(i < A.size() && j < B.size())
{
if(A[i] < B[j])
{
c[k++] = A[i++];
}
else
{
c[k++] = B[j++];
}
}
while(i < A.size())
{
c[k++] = A[i++];
}
while(j < B.size())
{
c[k++] = B[j++];
}
vector<int> C(c, c+count);
return C;
}
};
我将A和B的值都整合到数组c中,再将数组c中的值赋给vector<int> C,这样便可以返回c的结果。
这道题我直接使用了整型数组的方法整合,整理并排序,这样的方法在空间复杂度上会多使用空间来存储整合后的集合,但是这样就省下了排序的过程。