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

Posted RounieJane

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode350之实现求解两数组交集(包含重复元素)相关的知识,希望对你有一定的参考价值。

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

说明:

  • 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
  • 我们可以不考虑输出结果的顺序
 1 def binarySearch(nums, target):
 2     ‘‘‘
 3     在数组中二分查找指定元素
 4     :param nums:
 5     :param target:
 6     :return:
 7     ‘‘‘
 8     left, right = 0, len(nums) - 1
 9     while left <= right:
10         mid = left + (right - left) // 2
11         if nums[mid] == target:
12             return True
13         elif nums[mid] < target:
14             left = mid + 1
15         else:
16             right = mid - 1
17 
18     return False
19 
20 
21 def intersect1(num1, num2):
22     ‘‘‘
23     求两个列表交集元素
24     :param num1:
25     :param num2:
26     :return:
27     ‘‘‘
28     array1 = []
29     num1 = sorted(num1)
30     for i in num2:
31         if binarySearch(num1, i):
32             array1.append(i)
33             num1.remove(i)
34     array1 = sorted(array1)
35 
36     return array1
37 
38 
39 print("==========测试intersect()==========")
40 nums1 = [1, 3, 1, 2, 4, 2]
41 nums2 = [4, 8, 1, 2, 1, 3, 8, 2]
42 array1 = intersect1(nums1, nums2)
43 print("array1=", array1)
44 
45 
46 def intersect2(nums1, nums2):
47     ‘‘‘
48 
49     :param nums1:
50     :param nums2:
51     :return:
52     ‘‘‘
53     array2 = []
54     temp_array2 = set(nums1) & set(nums2)  # temp_array2 is a set
55     for i in temp_array2:
56         array2 += [i] * min(nums1.count(i), nums2.count(i))
57     return array2
58 
59 
60 print("+++++++++++测试intersect2()+++++++++++++")
61 array2 = intersect2(nums1, nums2)
62 print("array2=", array2)
63 
64 
65 def intersect3(nums1, nums2):
66     ‘‘‘
67 
68     :param nums1:
69     :param nums2:
70     :return:
71     ‘‘‘
72     array3 = []
73     for i in nums1:
74         if i in nums2:
75             array3.append(i)
76             nums2.remove(i)
77     array3 = sorted(array3)
78     return array3
79 
80 
81 print("----------------测试intersect3()-----------")
82 array3 = intersect3(nums2, nums1)
83 print("array3=", array3)

输出:

==========测试intersect()==========
array1= [1, 1, 2, 2, 3, 4]
+++++++++++测试intersect2()+++++++++++++
array2= [1, 1, 2, 2, 3, 4]
----------------测试intersect3()-----------
array3= [1, 1, 2, 2, 3, 4]

 

以上是关于leetcode350之实现求解两数组交集(包含重复元素)的主要内容,如果未能解决你的问题,请参考以下文章

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

题目地址(350. 两个数组的交集 II)

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

[JavaScript 刷题] 哈希表 - 两个数组的交集 II,leetcode 350

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

[350].两个数组的交集 II