350 两个数组的交集2
给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q3cm6dZ0-1659951718165)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220808155842543.png)]
选择字典来存储长度较大的数组的元素及其出现的次数,如果num2中的元素在1中有则添加到res中,相应出现的次数-1,如果2中还有元素在1中出现但是count[j] <0,说明2中出现该元素的次数比1中多,此时也不可以再像res中添加了。
from collections import defaultdict
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
if len(nums1) > len(nums2):
return self.intersect(nums2, nums1)
res = []
count = defaultdict(int)
for i in nums1:
count[i] += 1
for j in nums2:
if count[j] > 0:
res.append(j)
count[j] -= 1
return res
return res