码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-08-13 12:44:34      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:代码实现   span   重复元素   ict   append   from   strong   and   counter   

349、给定两个数组,编写一个函数来计算它们的交集。

 

示例 1:

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

示例 2:

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

 

说明:

  • 输出结果中的每个元素一定是唯一的。
  • 我们可以不考虑输出结果的顺序。
 
350、给定两个数组,编写一个函数来计算它们的交集。

 

示例 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)

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

标签:代码实现   span   重复元素   ict   append   from   strong   and   counter   

原文地址:https://www.cnblogs.com/rounie/p/13494886.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!