leetcode348&350之计算两个数组的交集

2021-04-02 13:25

阅读:450

 

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]

来源:leetcode
代码实现:
 1 from collections import Counter
 2 
 3 
 4 def instersection(nums1, nums2):
 5     ‘‘‘
 6     计算两个数组的交集
 7     :param nums1:
 8     :param nums2:
 9     :return:
10     ‘‘‘
11     return list(set(nums1) & set(nums2))
12 
13 
14 print("------测试intersection()--------")
15 nums1 = [4, 9, 5]
16 nums2 = [9, 4, 9, 8, 4]
17 res = instersection(nums1, nums2)
18 print(res)
19 
20 
21 def intersect(nums1, nums2):
22     res = []
23     for i in nums1:
24         if i in nums2:
25             nums2.remove(i)
26             res.append(i)
27     return res
28 
29 
30 print("------测试intersect()-------")
31 nums1 = [4, 9, 5]
32 nums2 = [9, 4, 9, 8, 4]
33 res = intersect(nums1, nums2)
34 print("res=", res)
35 
36 
37 def intersect1(nums1, nums2):
38     res = {}
39     for num in nums1:
40         if res.get(num) == None:
41             res[num] = 1
42         else:
43             res[num] += 1
44     print(res)
45 
46     result = []
47     for num in nums2:
48         if num in res and res[num] != 0:
49             result.append(num)
50             res[num] -= 1
51         else:
52             continue
53     return result
54 
55 
56 print("------测试intersect1()-------")
57 nums1 = [4, 9, 5]
58 nums2 = [9, 4, 9, 8, 4]
59 result = intersect1(nums1, nums2)
60 print("result=", result)

输出:

------测试intersection()--------
[9, 4]
------测试intersect()-------
res= [4, 9]
------测试intersect1()-------
{4: 1, 9: 1, 5: 1}
result= [9, 4]

总结:349考虑重复元素,当元素重复出现时,只输出一个就行了,借助set很容易实现。return list(set(nums1)&set(nums2))。set间的&表示两集和求交集

350当元素重复时,输出结果元素出现次数应与每个元素在两列表中出现的最低次数一致。代码中采用两种方法来实现

新的知识点:

collections.Counter统计迭代器中元素个数,可以将Counter转为dict,遍历dict和hash表空间复杂度为O(1),遍历列表空间复杂度为O(N)


评论


亲,登录后才可以留言!