aIndex++;
} else if (a[aIndex] > b[bIndex]) {
c.add(b[bIndex]);
bIndex++;
} else {
c.add(a[aIndex]);
aIndex++;
bIndex++;
}
}
// 将没有超出数组下标的数组其余全部加到数组c中
// 如果a数组还有数字没有处理
if (aIndex <= a.length - 1) {
for (int i = aIndex; i <= a.length - 1; i++) {
c.add(a[i]);
}
// 如果b数组中还有数字没有处理
} else if (bIndex <= b.length - 1) {
for (int i = bIndex; i <= b.length - 1; i++) {
c.add(b[i]);
}
}
return c;
}
/**
* 对两个有序数组进行合并,并将重复的数字将其去掉
*
* @param a
* :已排好序的数组a
* @param b
* :已排好序的数组b
* @return合并后的排序数组,返回数组的长度=a.length + b.length,不足部分补0
*/
private static int[] mergeByArray(int[] a, int[] b) {
int[] c = new int[a.length + b.length];
int i = 0, j = 0, k = 0;
while (i < a.length && j < b.length) {
if (a[i] <= b[j]) {
if (a[i] == b[j]) {
j++;
} else {
c[k] = a[i];
i++;
k++;
}
} else {
c[k] = b[j];
j++;
k++;
}
}
while (i < a.length) {
k++;
i++;
}
while (j < b.length) {
c[k] = b[j];
j++;
k++;
}
return c;
}
/**
* 对两个有序数组进行合并,并将重复的数字将其去掉
*
* @param a
* :可以是没有排序的数组
* @param b
* :可以是没有排序的数组
* @return合并后的排序数组 打印时可以这样: Map
* Iterator iterator = map.entrySet().iterator(); while
* (iterator.hasNext()) { Map.Entry mapentry =
* (Map.Entry)iterator.next();
* System.out.print(mapentry.getValue()+" "); }
*/
private static Map
Map
for (int i = 0; i < a.length; i++) {
map.put(a[i], a[i]);
}
for (int i = 0; i < b.length; i++) {
map.put(b[i], b[i]);
}
return map;
}
/**
* 在控制台打印数组,之间用逗号隔开,调试时用
*
* @param array
*/
public static String print(int[] array) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; i++) {
sb.append("," + array[i]);
}
System.out.println("\n"+sb.toString().substring(1));
return sb.toString().substring(1);
}
}