原理:
类似于布隆过滤器,取Integer最大的boolean数组,循环第一个数组插入boolean数组,并设值为true,
然后循环第二个数组,判断boolean数组是否为true,为true则表示 两个数组重复了
实现:
public int[] intersection(int[] nums1, int[] nums2) {
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int num : nums1) {
max = Math.max(max, num);
min = Math.min(min, num);
}
boolean[] bucket = new boolean[max - min + 1];
for (int num : nums1) {
bucket[num - min] = true;
}
int index = 0;
for (int num : nums2) {
if (num < min || num > max) {
continue;
}
if (bucket[num - min]) {
nums2[index++] = num;
bucket[num - min] = false;
}
}
return Arrays.copyOf(nums2, index);
}