两个有序整数数组
num1
和
num2
,将
num2
合并到
num1
中,使
num1
成为一个有序数组。
public static void main(String[] args) {
int []num1=new int[]{1,3,5,7,9,0,0,0,0};
int []num2=new int[]{2,4,6,8};
mergeArr(num1,5,num2,4);
System.out.println(Arrays.toString(num1));
}
private static int[] mergeArr(int[] num1, int m, int[] num2, int n) {
int[]num1Copy=new int[m];
System.arraycopy(num1,0,num1Copy,0,m);
int p1=0,p2=0,p=0;
while ((p1<m)&&(p2<n)){
num1[p++]=(num1Copy[p1]>=num2[p2])?num2[p2++]:num1Copy[p1++];
}
if (p1<m){
System.arraycopy(num1Copy,p1,num1,p1+p2,m+n-p1-p2);
}
if (p2<n){
System.arraycopy(num2,p2,num1,p1+p2,m+n-p1-p2);
}
return num1;
}
//双指针优化
private static int[] mergeArr2(int[] num1, int m, int[] num2, int n){
int p1=m-1;
int p2=n-1;
int p=m+n-1;
while (p2>=0&&p1>=0){
num1[p--]=(num1[p1]<num2[p2])?num2[p2--]:num1[p1--];
}
System.arraycopy(num2, 0, num1, 0, p2+1 );
return num1;
}