LeetCode 349- 两个数组的交集--简单

题目描述:

给定两个数组,编写一个函数来计算它们的交集。
 
示例 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)
发布了132 篇原创文章 · 获赞 112 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/heda3/article/details/104033958