排序题目之两个数组的交集
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
说明:
-
输出结果中的每个元素一定是唯一的。
-
我们可以不考虑输出结果的顺序。
首先说一下我自己的(菜鸡)思路:我先是想先去重第第一个数组(nums1),然后循环判断值是否在nums2中,有的话,添加新的列表中。
代码实现如下例1:
1 class Solution: 2 def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: 3 num1 = set(nums1) 4 num = [i for i in num1 if i in nums2] 5 return num
还有一种类似的方法例2:
1 class Solution: 2 def set_intersection(self, set1, set2): 3 return [x for x in set1 if x in set2] 4 5 def intersection(self, nums1, nums2): 6 """ 7 :type nums1: List[int] 8 :type nums2: List[int] 9 :rtype: List[int] 10 """ 11 set1 = set(nums1) 12 set2 = set(nums2) 13 14 if len(set1) < len(set2): 15 return self.set_intersection(set1, set2) 16 else: 17 return self.set_intersection(set2, set1)
但是他的运行时间:
比我自己做快了24ms,值得深思问题,复杂度分析,
-
时间复杂度:O(m+n)O(m+n),其中 n 和 m 是数组的长度。O(n)O(n) 的时间用于转换 nums1 在集合中,O(m)O(m) 的时间用于转换 nums2 到集合中,并且平均情况下,集合的操作为 O(1)O(1))
-
空间复杂度:O(m+n)O(m+n),最坏的情况是数组中的所有元素都不同。
对于无所不能的python 来说,内置了交集方法,看看下面的操作例3:
class Solution:
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
set1 = set(nums1)
set2 = set(nums2)
return list(set2 & set1)
怎样是不是有点无语,看看他的运行时间,虽然运行速度比上面例2慢了一些,但是代码的简洁了很多,各有优缺点。
复杂度分析:
-
时间复杂度:一般情况下是 O(m+n)O(m+n),最坏情况下是 O(m \times n)O(m×n)。
-
空间复杂度:最坏的情况是 O(m+n)O(m+n),当数组中的元素全部不一样时。
只能说还是太菜。。。。。。。。
初学者
分享及成功,你的报应就是我,记得素质三连!
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/intersection-of-two-arrays