合并排序数组 merge-sorted-array
题目描述
给出两个有序的整数数组A和B,请将数组B合并到数组A中,变成一个有序的数组
注意:
可以假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为m和n
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的m+n-1位置开始依次合并,即将A和B从大到小合并
- 指针pa和pb分别用于从后往前遍历A和B数组,初始分别为m-1和n-1,代表指向A和B元素的右下标
- 指针index用于指向合并后区域的右下标,初始为m+n-1,代表指向合并区域的最后一个位置
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
//分别用于遍历数组A和B,初始指向右下标
int pa(m - 1), pb(n - 1);
//用于记录合并后数组的右下标
int index(m + n - 1);
while(pa >= 0 && pb >= 0) {
if(A[pa] > B[pb]) {
A[index --] = A[pa --];
} else {
A[index --] = B[pb --];
}
}
while(pb >= 0) A[index --] = B[pb --];
}
};