题目:
解决方法:数组+双指针,倒着存,数据的挪动会少一些
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int tag = n + m - 1;
int i = m-1;
int j = n-1;
while(i>=0 || j>=0){
if(i<0)
A[tag--] = B[j--];
else if(j<0)
A[tag--] = A[i--];
else{
if(A[i]>B[j])
A[tag--] = A[i--];
else if(A[i]<B[j])
A[tag--] = B[j--];
else
{
A[tag--] = A[i--];
A[tag--] = B[j--];
}
}
}
}
}
简化一下:
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int tag = n + m - 1;
int i = m-1;
int j = n-1;
while(j>=0){
if(i<0)
A[tag--] = B[j--];
else{
if(A[i]>B[j])
A[tag--] = A[i--];
else
A[tag--] = B[j--];
}
}
}
}
时间复杂度:O(n)
空间复杂度:O(1)