由于收到LeetCode-1
的启发,使用哈希集合存储元素,则可以在 O(1)
的时间内判断一个元素是否在集合中,从而降低时间复杂度,我决定要用map
来做,把一个数组的值全部放进map
里,再遍历第二个数组,如果map
中有第二个数组包含的数,证明是两个数组的交集部分,把这交集部分加入集合set
中(这里用set
主要考虑到的是set
中有自动去重,如果要用ArrayList
还要加一句重复判断,果断用set
),遍历结束后set
的大小就是我们要返回的数组ans
的大小,我们再用迭代器遍历set
,把里面的值赋给ans
返回即可。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set = new HashSet<>();
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums1.length; i++) {
map.put(i, nums1[i]);
}
for (int i = 0; i < nums2.length; i++) {
if (map.containsValue(nums2[i]))
set.add(nums2[i]);
}
int[] ans = new int[set.size()];
Iterator<Integer> integerIterator = set.iterator();
int i = 0;
while (integerIterator.hasNext()) {
int num = integerIterator.next().intValue();
ans[i++] = num;
}
return ans;
}
}