题解 | #合并两个有序的数组#
合并两个有序的数组
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);
int pt1 = 0, pt2 = 0;
int cur = 0;
while(pt1<m && pt2<n)
{
if(A[pt1]<B[pt2])
{
ans[cur] = A[pt1];
pt1++;
}
else
{
ans[cur] = B[pt2];
pt2++;
}
cur++;
}
while(pt1<m)
{
ans[cur] = A[pt1];
pt1++;
cur++;
}
while(pt2<n)
{
ans[cur] = B[pt2];
pt2++;
cur++;
}
//再把 ans赋给 A
for(int i=0; i<m+n; ++i)
{
A[i] = ans[i];
}
}
};
额外开辟空间了 感觉还可以优化
查看25道真题和解析