📜  给定两个算术序列中的最小公有元素(1)

📅  最后修改于: 2023-12-03 15:27:34.532000             🧑  作者: Mango

给定两个算术序列中的最小公有元素

当我们需要在两个算术序列中找到它们的最小公有元素时,我们可以使用以下方法:

  1. 先将两个序列排序
  2. 创建两个指针,一个指向第一个序列的开头,另一个指向第二个序列的开头
  3. 比较指针所指向的元素,如果相等,则返回该元素
  4. 如果第一个指针所指向的元素小于第二个指针所指向的元素,则将第一个指针后移一位
  5. 如果第二个指针所指向的元素小于第一个指针所指向的元素,则将第二个指针后移一位
  6. 重复步骤3至5,直到找到最小公有元素或者至少有一个指针到达了序列末尾

下面是python实现代码:

def find_least_common_num(a: List[int], b: List[int]) -> Union[int, None]:
    """
    找到两个算术序列中的最小公有元素

    :param a: 第一个算术序列
    :param b: 第二个算术序列
    :return: 最小公有元素,如果不存在则返回None
    """
    a_len = len(a)
    b_len = len(b)
    if a_len == 0 or b_len == 0:
        return None

    a.sort()
    b.sort()

    i = 0
    j = 0
    while i < a_len and j < b_len:
        if a[i] == b[j]:
            return a[i]
        elif a[i] < b[j]:
            i += 1
        else:
            j += 1

    return None

我们可以用以下测试用例来验证上述代码的正确性:

assert find_least_common_num([1, 2, 3, 4], [3, 4, 5, 6]) == 3
assert find_least_common_num([1, 2, 3, 4], [5, 6, 7, 8]) is None

这个函数的时间复杂度是O(nlogn),其中n为两个序列的长度之和。