题目:
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[4,9]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 我们可以不考虑输出结果的顺序。
解题思路:
1、先对两个列表进行排序,可直接对比头尾元素,若列表1的头比列表2的尾要大时,说明他们两个没有交集。
2、比较两个列表的长度,长的作为被比较量,短的作为比较量。
3、遍历短列表,如果元素也在另一个列表中出现,则此元素为交集中的一员。因为每个元素只能被比较一次,因此每次比较相等后都要删除掉该元素,避免下次再拿它来比较。
源码实现:
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
nums1.sort()
nums2.sort()
num3 = []
if nums1[-1] < nums2[0] or nums1[0] > nums2[-1]:
return []
if len(nums1) >= len(nums2):
for i in nums2:
if i in nums1:
num3.append(i)
nums1.remove(i)
else:
for i in nums1:
if i in nums2:
num3.append(i)
nums2.remove(i)
return num3
另一个做法(利用set):
class Solution(object):
def intersect(self, nums1, nums2):
inter = set(nums1) & set(nums2)
l = []
for i in inter:
l += [i] * min(nums1.count(i), nums2.count(i))
return l