Наборы не допускают дублирования, поэтому они не подходят, если вы ожидаете, что вывод будет содержать дубликаты.
Вы можете использовать Map<Integer,Integer>
для подсчета вхождений каждого элемента первого массива, и затем сравните их со вторым массивом:
public int[] intersect(int[] nums1, int[] nums2) {
Map<Integer,Integer> map1 = new HashMap<>();
for (int n : nums1) {
if (map1.containsKey(n))
map1.put(n,map1.get(n)+1);
else
map1.put(n,1);
}
List<Integer> inter = new ArrayList<>();
for (int n : nums2) {
Integer count = map1.get(n);
if (count != null && count > 0) {
map1.put(n,count-1);
inter.add(n);
}
}
int[] output = new int[inter.size()];
for(int i = 0; i < inter.size(); i++)
output[i]=inter.get(i);
return output;
}