Merge Sorted Array
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 m and n respectively.
考虑从后往前合并,就不需要考虑数据移动的问题了,开始没想到这一点,看了别人的博客才想到的,挺巧妙
我的:
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
if (!n) return;
int l=0, r=0;
while (l<m) {
if (A[l] > B[r]) {
swap(A[l], B[r]);
for (int i=r; i<n-1; i++)
if (B[i]>B[i+1]) swap(B[i], B[i+1]);
else break;
} else
l++;
}
for (int i=0; i<n; i++)
A[m+i] = B[i];
}
};
别人的:
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int index = m + n - 1;
int aIndex = m - 1;
int bIndex = n - 1;
while (0 <= aIndex && 0 <= bIndex) {
if (B[bIndex] > A[aIndex])
A[index--] = B[bIndex--];
else
A[index--] = A[aIndex--];
}
while (0 <= aIndex)
A[index--] = A[aIndex--];
while(0 <= bIndex)
A[index--] = B[bIndex--];
}
};