1.题目描述
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
2.解题思路&代码
此题描述的交集并不是数学概念上的交集,此题中指的交集实际是真正的交集去重后的结果
代码如下:
# 定义(非递归)二分查找函数,提高查找效率
def binary_chop(_list, item):
end = len(_list) - 1
start = 0
while start <= end:
mid = (start + end) // 2
if item == _list[mid]:
return item
elif item < _list[mid]:
end = mid - 1
elif item > _list[mid]:
start = mid + 1
class Solution(object):
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
# 定义空列表用来存放交集中的数据
list1 = []
# 使用二分查找前需要对列表进行排序(二分查找使用的前提是数据必须通过顺序表存储且数据必须有序)
nums2.sort()
# for循环和二分查找中的num1,和num2位置可以交换(前提是nums1和nums2都用sort()排序过)
for item in nums1:
result = binary_chop(nums2, item)
# 如果result为None,则在num2中并未查找到item,反之,将result添加到列表中
if result is not None:
list1.append(result)
# 此题的结果是去重的交集且返回值类型是列表,所以需要先将列表转换成集合去重后再转换成列表
return list(set(list1))