本文共 3013 字,大约阅读时间需要 10 分钟。
链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii
给定两个数组,编写一个函数来计算它们的交集。示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
from collections import Counterdef intersect(nums1,nums2): # print(Counter(nums1),Counter(nums2)) # print((Counter(nums1) & Counter(nums2))) # print(*(Counter(nums1) & Counter(nums2))) # 序列+*相当于解压 return [*(Counter(nums1) & Counter(nums2)).elements()]# 测试数据 1# nums1 = [1,2,2,1]# nums2 = [2,2]# 测试数据 2nums1 = [4,9,5]nums2 = [9,4,9,8,4]print(intersect(nums1,nums2))
输出:
Counter({ 4: 1, 9: 1, 5: 1}) Counter({ 9: 2, 4: 2, 8: 1})Counter({ 4: 1, 9: 1})4 9[4, 9]
解法原链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/solution/1-xing-python-jin-jie-jie-fa-by-qqqun902025048/
python内置函数,快速统计单词在字符串 / 文本中出现的次数
https://blog.csdn.net/eddy_zheng/article/details/47336271 字符串的用法同上 文本单词的统计如下利用字典统计nums1和nums2每个元素的数量,然后取得两个字典 相同键的 最小值
,返回结果。
from collections import defaultdictdef intersect(nums1, nums2): dct1 = defaultdict(int) # 字典dct1 存nums1 for i in nums1: dct1[i] += 1 dct2 = defaultdict(int) # 字典dct2 存nums2 for i in nums2: dct2[i] += 1 print(dct1,'\n',dct2,'\n',set(dct1)&set(dct2)) dct3 = { i: min(dct1[i], dct2[i]) for i in set(dct1)&set(dct2)} print(dct3) return sum([[key]*val for key, val in dct3.items()], []) # nums1 = [1,2,2,1]# nums2 = [2,2]nums1 = [4,9,5]nums2 = [9,4,9,8,4]print(intersect(nums1,nums2))
输出
defaultdict(, { 4: 1, 9: 1, 5: 1})defaultdict( , { 9: 2, 4: 2, 8: 1}){ 9, 4}{ 9: 1, 4: 1}[9, 4]
解法原链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/solution/python3-ha-xi-biao-by-ting-ting-28-3/
使用defaultdict任何未定义的key都会默认返回一个根据method_factory参数不同的默认值, 而相同情况下dict()会返回KeyError.
取交集的9,dct1[9]=1,dct2[9]=2,min(dct1[i], dct2[i]) 为1,则dct3中存{
9:1} 取交集的4,dct1[4]=1,dct2[4]=2,min(dct1[i], dct2[i]) 为1,则dct3中存{ 9:1,4: 1}val为几,key就出现几次
如 9 1 ==> [9] 如 4 1 ==> [4] 如 7 3 ==> [7,7,7]一行 [key]*val for key, val in dct3.items() 的结果
[[9], [4]]
sum([[key]*val for key, val in dct3.items()],[]) 的结果
[9, 4]
得加个[ ] ,否则会报错,可能是要将它看成一整个数组才行
In [5]: sum([1,2],[3])---------------------------------------------------------------------------TypeError Traceback (most recent call last)in ()----> 1 sum([1,2],[3])TypeError: can only concatenate list (not "int") to listIn [6]: sum([[1,2]],[3])Out[6]: [3, 1, 2]
可以新建个数组存放
list4 = []for key, val in dct3.items(): # print(key,val,[key]*val) list4 = list4+[key]*val
In [1]: a = [1,2]In [2]: d = a+[4,4]In [3]: dOut[3]: [1, 2, 4, 4]