跳到主要内容

如何计算两个有序整形数组的交集,比如: 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函数接受两个数组ab作为输入,并返回它们的交集。我们使用两个指针ij来遍历这两个数组。如果a[i]b[j]相等,我们就把这个元素添加到结果数组中,并移动两个指针。如果a[i]小于b[j],我们就只移动i指针。否则,我们就只移动j指针。当任何一个指针到达数组末尾时,我们就停止遍历。

这个算法的时间复杂度是O(n+m),其中n和m分别是两个数组的长度。因为每个元素最多被比较一次,所以这个算法是非常高效的。