【题目描述】
首先是菜鸡思路,对两数组去重然后对长度较小的数组做循环,一次检测较小数组里的元素是否在较大数组中。相当于循环中查找,时间复杂度达到n的平方,因为其实每次查找时间复杂度是O(n)的。 反面教材,代码如下:
class Solution(object):
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
nums1=list(set(nums1))
nums2=list(set(nums2))
if len(nums1)>len(nums2):
return self.find(nums2,nums1)
return self.find(nums1,nums2)
def find(self,shortone,longone):
re=[]
for i in shortone:
if i in longone:
re.append(i)
return list(set(re))
复制代码
正面教材是,python中的set函数,其官方描述为:
set() 创建一个无序不重复元素集,进行关系测试,删除重复数据,可以计算交集、差集、并集等。
复制代码
可见充分了解库函数的重要性啊,一行代码搞定。
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return list(set(nums1)&set(nums2))
复制代码
两个集合之间可以交并差的计算。
>>> x & y # 交集
>>> x | y # 并集
>>> x - y # 差集
复制代码