csdn:https://blog.csdn.net/renweiyi1487/article/details/109264635
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
哈希
求两个数组的交集就是求两个数组的共有元素,可以使用两个set集合来存放每个数组中不重复的元素,然后迭代另一个set集合中的元素,如果迭代元素属于另一个set集合则该元素属于交集中的元素。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
List<Integer> ans = new ArrayList<>();
HashSet<Integer> set1 = new HashSet<>();
HashSet<Integer> set2 = new HashSet<>();
for (Integer num : nums1) {
set1.add(num);
}
for (Integer num : nums2) {
set2.add(num);
}
Iterator<Integer> it = set2.iterator();
while (it.hasNext()) {
int num = it.next();
if (set1.contains(num)) {
ans.add(num);
}
}
int[] finalAns = new int[ans.size()];
for (int i = 0; i < finalAns.length; i++) {
finalAns[i] = ans.get(i);
}
return finalAns;
}
}
写法二:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int[] output = new int[nums1.length];
HashSet<Integer> set1 = new HashSet<>();
HashSet<Integer> set2 = new HashSet<>();
for (Integer num : nums1) {
set1.add(num);
}
for (Integer num : nums2) {
set2.add(num);
}
int idx = 0;
for (Integer num : set2) {
if (set1.contains(num))
output[idx++] = num;
}
return Arrays.copyOf(output, idx);
}
}