本题题目要求如下:
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 (size that is greater or equal to m + n) to hold additional elements from B. The number of elements initialized in A and B are mand n respectively.
基本算法就是把A[0] ... A[m-1]这些元素复制到A[n] ... A[n+m-1]中。。再进行传统的mergesort中的merge过程。。
详细代码如下:
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int i;
for (i = m - 1; i >= 0; --i)
A[i+n] = A[i];
i = 0;
int j = 0;
int k = 0;
while (i < m && j < n) {
if (A[i+n] < B[j]) {
A[k++] = A[n+i];
++i;
}
else {
A[k++] = B[j++];
}
}
while (i < m) {
A[k++] = A[i+n];
++i;
}
while (j < n) {
A[k++] = B[j++];
}
}
};
更新一下代码:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
nums1.resize(m+n);
int i = m - 1;
int j = n - 1;
while (i >= 0 and j >= 0) {
if (nums1[i] > nums2[j]) {
nums1[i+j+1] = nums1[i];
--i;
}
else {
nums1[i+j+1] = nums2[j];
--j;
}
}
while (j >= 0) {
nums1[j] = nums2[j];
--j;
}
}
};