Given two sorted integer arrays A and B, merge B into A as one sorted array.
Note:
You may assume that A has enough space to hold additional elements from B. The number of elements initialized in A and B are m and n respectively.
归并数组 A[] B[] ,A有足够的空间放下B;
如果从左往右归并的话,会需要移位(将A的数组后移)
所以可以考虑从右往左归并。
三个指针:
k : 结果数组的指针,初始指向结果数组末尾 也即A[k] k = m+n-1;
pa: 指向A数组中元素的指针, 初始指向A末尾 pa = m-1;
pb: 指向B数组中元素的指针,初始指向B末尾 pb = n-1;
三个指针不断前移,直到pa == 0 ,pb == 0
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(n <= 0) return ;
int k = m+n-1;
int pa = m-1;
int pb = n-1;
while(pa >= 0 && pb >= 0) {
A[k--] = A[pa] > B[pb] ? A[pa--] : B[pb--];
}
while(pb >= 0) A[k--] = B[pb--];
}
};