1 class Solution {
2 public:
3 void merge(int A[], int m, int B[], int n) {
4 // Note: The Solution object is instantiated only once and is reused by each test case.
5 int i, j;
6 if (m<=0){
7 for(i=0; i<n; i++)
8 A[i] = B[i];
9 return;
10 }
11 int * tags = new int[m];
12 j = 0;
13 for (i=0; i<m; i++){
14 if (i==0)
15 tags[i] = 0;
16 else tags[i] = tags[i-1];
17 while(j<n && B[j]<A[i]){
18 tags[i]++;
19 j++;
20 }
21 }
22 int k;
23 k = m+n-1;
24 j = n-1;
25 for (i=m-1; i>=0; i--){
26 while(i+tags[i]<k)
27 A[k--] = B[j--];
28 if (i+tags[i]==k)
29 A[k--] = A[i];
30 }
31 for (i=0; i<tags[0]; i++)
32 A[i] = B[i];
33 delete []tags;
34 }
35 };