需求:有序数组a[]和b[],将它们合并成有序数组c[]。
思路:新建一个以两个集合长度之和为长度的新数组,从两数组最左边开始比起,把小的放入新集合,并用变量标记后一位置, 每次比较都是比较的最左边未比较过的元素(通过变量),循环比较,直至其中有一个集合遍历结束,将另一个集合剩余部分加入新集合中即可.
代码实现:
import java.util.Arrays;
public class TwoIntoOne {
//合并有序数组
private static int[] twoConvertOne(int[] a,int[] b){
//判断边界
if (a==null||a.length==0){
return b;
}
if (b==null||b.length==0){
return a;
}
//定义一个新的数组
int[] c=new int[a.length+b.length];
//定义初始索引;
//m是a的索引,n是b的索引
int m=0;
int n=0;
//遍历
for (int i = 0; i < c.length; i++) {
if (m<a.length&&n<b.length){
if (a[m]<b[n]){
c[i]=a[m];
m++;
}else {
c[i]=b[n];
n++;
}
}else if (m<a.length){
c[i]=a[m];
m++;
}else if (n<b.length){
c[i]=b[n];
n++;
}
}
//返回新的数组
return c;
}
//测试
public static void main(String[] args) {
int[] a=new int[]{1,3,5,7};
int[] b=new int[]{2,4,6,8,10,11};
int[] c = twoConvertOne(a, b);
System.out.println(Arrays.toString(c));
}
}