一个将它们合并、去除重复项并排序的方法。
我建议您将其拆分为辅助方法(并稍微调整操作顺序)。步骤1,合并这两个数组。例如:
static int[] mergeArrays(int[] a, int[] b) {
int[] c = new int[a.length + b.length];
for (int i = 0; i < a.length; i++) {
c[i] = a[i];
}
for (int i = 0; i < b.length; i++) {
c[a.length + i] = b[i];
}
return c;
}
步骤2,对新数组进行排序(您现有的排序算法很好)。例如:
static void sortArray(int[] a) {
for (int lastPos = a.length - 1; lastPos >= 0; lastPos--) {
for (int index = 0; index <= lastPos - 1; index++) {
if (a[index] > a[index + 1]) {
int temp = a[index];
a[index] = a[index + 1];
a[index + 1] = temp;
}
}
}
}
最后,删除重复项。第三步a,计算unique(独特)值。假设它们是唯一的,通过计算相邻且相等的值来递减。比如说,
static int countUniqueValues(int[] c) {
int unique = c.length;
for (int i = 0; i < c.length; i++) {
while (i + 1 < c.length && c[i] == c[i + 1]) {
i++;
unique--;
}
}
return unique;
}
然后进行第3b步,对唯一计数进行处理,并使用之前的方法构建结果。例如:
public static int[] mergeDedupSort(int[] a, int[] b) {
int[] c = mergeArrays(a, b);
sortArray(c);
int unique = countUniqueValues(c);
int[] d = new int[unique];
int p = 0;
for (int i = 0; i < c.length; i++) {
d[p++] = c[i];
while (i + 1 < c.length && c[i] == c[i + 1]) {
i++;
}
}
return d;
}
然后,您可以使用您的数组进行测试,例如:
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4, 8, 5, 7, 9, 6, 0 };
int[] b = { 0, 2, 11, 12, 5, 6, 8 };
int[] c = mergeDedupSort(a, b);
System.out.println(Arrays.toString(c));
}
我得到了
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12]
ArrayList?它是标准的Java SE库,因此永远不会出现无法访问它的情况。 - ostrichofevil