题解 | #合并两个有序的数组#
合并两个有序的数组
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