java算法_有序数组合并
2019-04-11 本文已影响0人
王康健_0124
无序数组合并:
public static void main(String[] args) {
String[] str1 = {"1","2","3","7"};
String[] str2 = {"4","5","6"};
int str1Length = str1.length;
int str2length = str2.length;
str1 = Arrays.copyOf(str1, str1Length+str2length);//数组扩容
System.arraycopy(str2, 0, str1, str1Length, str2length);
System.out.println(Arrays.toString(str1));
}
有两个有序数组,合并成一个有序数组,例如:arr1={1,3,4,7} arr2={2,5,8} 合并后为 {1,2,3,4,5,7,8} ,要求时间复杂度最小
有序数组合并:
public static void main(String[] args) {
int[] num1 = new int[]{1,3,4,7};
int[] num2 = new int[]{2,5,8};
int[] sum3 = new int[num1.length + num2.length];//定义一个新的数组,然后做对比后往新的数组中插入数据
int a = 0, b = 0;
for (int i = 0; i < sum3.length; i++) {//新数组for循环,次数等于数组长度
if (a < num1.length && b < num2.length) {//if条件的含义:两个数组中数没有取完可以做对比
if (num1[a] > num2[b]) {//如果a下标比b下标的数组大,b放到新数组中,b+1
sum3[i] = num2[b];
b++;
} else {//反之,a下标数字比b小,a放到新数组中,a+1
sum3[i] = num1[a];
a++;
}
} else if (a < num1.length) {//如果不满足a < num1.length && b < num2.length说明有一个数字取完了数字,b取完,可以直接a放入新数组
sum3[i] = num1[a];
a++;
} else if (b < num2.length) {//a取完,可以直接b放入新数组
sum3[i] = num2[b];
b++;
}
}
System.out.println(Arrays.toString(sum3));
}