题解 | #合并两个有序的数组#
合并两个有序的数组
https://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665
class Solution {
public:
// 经典双指针
// 但这个和之前面试遇到的最简单的合并还不太一样
void merge(int A[], int m, int B[], int n) {
// 先写个需要额外开辟数组空间的 O(n) O(n)
// vector<int> ans(m+n);
//这种情况下 优先把最大的元素填到A的后面 也是各自从最大的元素往前遍历
int pt1 = m-1, pt2 = n-1;
int cur = m+n-1;
while(pt1>=0 && pt2>=0)
{
if(A[pt1]>B[pt2])
{
A[cur] = A[pt1];
pt1--;
}
else
{
A[cur] = B[pt2];
pt2--;
}
cur--;
}
while(pt1>=0)
{
A[cur] = A[pt1];
pt1--;
cur--;
}
while(pt2>=0)
{
A[cur] = B[pt2];
pt2--;
cur--;
}
// //再把 ans赋给 A
// for(int i=0; i<m+n; ++i)
// {
// A[i] = ans[i];
// }
}
};
根据题解 从后往前 空间复杂度为1
