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

Posted RounieJane

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode348&350之计算两个数组的交集相关的知识,希望对你有一定的参考价值。

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之计算两个数组的交集的主要内容,如果未能解决你的问题,请参考以下文章

leetcode350之实现求解两数组交集(包含重复元素)

前端与算法 leetcode 350. 两个数组的交集 II

Leetcode练习(Python):第350题:两个数组的交集 II:给定两个数组,编写一个函数来计算它们的交集。

Leetcode练习(Python):第350题:两个数组的交集 II:给定两个数组,编写一个函数来计算它们的交集。

LeetCode350. 两个数组的交集 II

leetcode350 两个数组的交集 II (Easy)