a. 集合框架Set的实例不包含重复元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Object[] duplicateArray(int[] a1, int[] a2) {
java.util.Set<Integer> set = new java.util.HashSet<Integer>();
java.util.ArrayList<Integer> list = new java.util.ArrayList<Integer>();
for(int e: a1)
set.add(e);
// 不能正确添加a2中元素,即当前元素为重复元素
for(int e: a2) {
if(!set.add(e))
list.add(e);
}
return list.toArray();
}

b. 借鉴归并排序中将两个有序数组合并成一个有序数组的思路。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Object[] duplicateArray2(int[] a1, int[] a2) {
// 先对两个数组元素进行快速排序
quicksort(a1);
quicksort(a2);
// 定义i1、i2分别指向a1、a2中的当前元素
int i1 = 0;
int i2 = 0;
java.util.ArrayList<Integer> list = new java.util.ArrayList<Integer>();
while(i1 < a1.length && i2 < a2.length) {
if(a1[i1] == a2[i2]) {
list.add(a1[i1]);
i1++;
i2++;
}
// 两元素不相等时,指向较小元素的i后移
else if(a1[i1] > a2[i2])
i2++;
else
i1++;
}
return list.toArray();
}