如何计算两个有序整形数组的交集,比如: a=0,1,2,3,4 b=1,3,5,7,9 ?
参考答案:
要计算两个有序整形数组的交集,我们可以使用双指针法。这种方法的基本思路是,我们维护两个指针,分别指向两个数组的开始位置。然后,我们比较这两个指针所指向的元素,如果它们相等,那么这个元素就是两个数组的交集元素。然后,我们移动这两个指针,继续寻找下一个可能的交集元素。如果这两个元素不相等,我们就移动指向较小元素的指针。
以下是使用Python实现这个算法的代码:
def intersection(a, b):
i, j = 0, 0
result = []
while i < len(a) and j < len(b):
if a[i] == b[j]:
result.append(a[i])
i += 1
j += 1
elif a[i] < b[j]:
i += 1
else:
j += 1
return result
a = [0, 1, 2, 3, 4]
b = [1, 3, 5, 7, 9]
print(intersection(a, b)) # 输出: [1, 3]
在这个代码中,intersection
函数接受两个数组a
和b
作为输入,并返回它们的交集。我们使用两个指针i
和j
来遍历这两个数组。如果a[i]
和b[j]
相等,我们就把这个元素添加到结果数组中,并移动两个指针。如果a[i]
小于b[j]
,我们就只移动i
指针。否则,我们就只移动j
指针。当任何一个指针到达数组末尾时,我们就停止遍历。
这个算法的时间复杂度是O(n+m),其中n和m分别是两个数组的长度。因为每个元素最多被比较一次,所以这个算法是非常高效的。