标签:leetcode
题意;将A,B连个有序数组合并到A中,A空间充足public class Solution {
public void merge(int A[], int m, int B[], int n) {
if(n == 0)return;
if(m == 0){
System.arraycopy(B, 0, A, 0, n);
return;
}
int i =0, j=0, temp = 0,k=0;
int [] C = new int[A.length];
while (i < m && j < n){
while (i < m && A[i] <= B[j]){
C[k ++] = A[i ++];
}
while (i < m && j < n && B[j] < A[i]){
C[k ++] = B[j ++];
}
}
if(i < m){
System.arraycopy(A, i, C, k , m - i);
}
if(j < n){
System.arraycopy(B, j, C, k, n - j);
}
System.arraycopy(C, 0, A, 0, C.length);
}
}思路2:从尾部反向遍历,将大的先放入数组的尾部空间复杂度为O(1),时间复杂度为O(N)public class Solution {
public void merge(int A[], int m, int B[], int n) {
if(n == 0)return;
if(m == 0){
System.arraycopy(B, 0, A, 0, n);
return;
}
int tail = m + n-1;
n--;m--;
while (m >= 0 && n >=0){
A[tail --] = Math.max(A[m], B[n]);
if(A[m] >= B[n]) m--;
else n--;
}
//while (n -- > 0){
// A[tail --] = B[n];
//}
if(n >= 0){
System.arraycopy(B,0,A,0,n+1);
}
}
}标签:leetcode
原文地址:http://blog.csdn.net/youmengjiuzhuiba/article/details/44859437