题目描述:
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
来源:力扣(LeetCode)
解题思路:
1、暴力破解-逐个迭代计算
时间复杂度O(n*m)
2、使用哈希表
1)哈希表实现的集合Set结构,它不允许集合出现重复的值
2)比较两个数组的大小,最小的数组逐个检查是否在最大的数组里,一个元素是否在另一个数组里的时间为O(1)
这得益于集合的使用
//Java
class Solution {
public int[] set_intersection(HashSet<Integer> set1, HashSet<Integer> set2)
{
int [] output = new int[set1.size()];
int idx = 0;
for (Integer s : set1)//遍历数据set1
if (set2.contains(s)) output[idx++] = s;//检查set2里是否包含set1,若包含则添加到新的数组里
return Arrays.copyOf(output, idx);
}
public int[] intersection(int[] nums1, int[] nums2)
{
HashSet<Integer> set1 = new HashSet<Integer>();//创建哈希表Set1
for (Integer n : nums1) set1.add(n);
HashSet<Integer> set2 = new HashSet<Integer>();//创建哈希表Set2
for (Integer n : nums2) set2.add(n);
//执行数据的交集操作
if (set1.size() < set2.size()) return set_intersection(set1, set2);
else return set_intersection(set2, set1);
}
}
算法复杂度分析:
时间复杂度:O(n)
空间复杂度:O(n)
//python3
class Solution:
def set_intersection(self, set1, set2):
return [x for x in set1 if x in set2]
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
set1 = set(nums1)#集合1
set2 = set(nums2)#集合2
if len(set1) < len(set2):
return self.set_intersection(set1, set2)
else:
return self.set_intersection(set2, set1)