题目描述
给出两个有序的整数数组 A和 B,请将数组B 合并到数组 A中,变成一个有序的数组
注意:
可以假设A 数组有足够的空间存放 B数组的元素, A和 B中初始的元素数目分别为 m和 n。
思路
方法:逆序归并
A的数组和B的数组逐个往前比较,大的放在A数组的后面,从后往前插入元素
O(m+n)
class Solution {
public:
void merge(int A[], int m, int B[], int n) {//逆向归并
int a=m-1,b=n-1;
//两组数组元素从右往左比较,大的从A的尾部开始逆序放置,直至一个数组比较完为止
int p=m+n-1;//AB合并后最后一个元素所在位置
while(a>=0&&b>=0){
A[p--]=A[a]>B[b]?A[a--]:B[b--];
}
while(b>=0)//A遍历结束,将剩余B元素直接添加到A数组
A[p--]=B[b--];
}
};
class Solution {
public:
void merge(int A[], int m, int B[], int n) {//逆向归并
int i=m-1;
int j=n-1;
int s=m+n-1;
while(i>=0&&j>=0){
if(A[i]>B[j]) A[s--]=A[i--];
else A[s--]=B[j--];
}
while(j>=0){
A[s--]=B[j--];
}
}
};
class Solution {
public:
void merge(int A[], int m, int B[], int n) {//逆向归并
for(int i=0;i<n;i++)
A[m+i]=B[i];
sort(A,A+m+n);
}
};