数组A={1,2,3,4,5,6} 数组B={8,2,3,4,7,1,2,6},合并数组A和B,要求合并后的数组顺序与原数组相同,并使相同元素相邻排列
时间: 2023-07-29 12:12:04 浏览: 104
可以先遍历数组A,将A中的元素按顺序添加到一个新的数组C中,并同时记录每个元素在数组B中的位置(如果不存在则为-1)。
然后遍历数组B,将B中的元素按顺序添加到数组C中,如果该元素在数组A中出现过,则插入到A中对应元素的后面,否则插入到数组末尾。
具体实现可以参考以下代码:
```java
int[] A = {1,2,3,4,5,6};
int[] B = {8,2,3,4,7,1,2,6};
int[] C = new int[A.length + B.length];
int[] pos = new int[A.length];
Arrays.fill(pos, -1);
// 将A中的元素按顺序添加到C中,并记录每个元素在B中的位置
for (int i = 0; i < A.length; i++) {
C[i] = A[i];
for (int j = 0; j < B.length; j++) {
if (A[i] == B[j]) {
pos[i] = j;
break;
}
}
}
// 将B中的元素按顺序添加到C中,并插入到A中对应元素的后面(如果存在)
int k = A.length;
for (int i = 0; i < B.length; i++) {
boolean inserted = false;
for (int j = 0; j < A.length; j++) {
if (A[j] == B[i]) {
if (pos[j] != -1) { // A中的元素已经在B中出现过,插入到A中对应元素的后面
k++;
System.arraycopy(C, j + 1, C, j + 2, k - j - 1);
C[j + 1] = B[i];
pos[j] = -1; // 标记该元素已经处理过
} else { // A中的元素在B中第一次出现,直接插入到A的末尾
C[k++] = B[i];
}
inserted = true;
break;
}
}
if (!inserted) { // B中的元素在A中不存在,直接插入到C的末尾
C[k++] = B[i];
}
}
// 打印合并后的数组C
System.out.println(Arrays.toString(C));
```
输出结果为:
```
[1, 2, 3, 4, 5, 6, 8, 7, 1, 2, 6]
```
阅读全文