Numpy串联+合并一维数组

Vid*_*dak 6 python arrays performance numpy

我需要连接数组,但如果它们重叠,还需要将A的结尾与B的开头合并。

[1, 2, 4] + [2, 4, 5] -> [1, 2, 4, 5]
[1, 2, 4] + [2, 5, 4] -> [1, 2, 4, 2, 5, 4]
[1, 2, 4] + [1, 2, 4, 5] -> [1, 2, 4, 5]
Run Code Online (Sandbox Code Playgroud)

注意:必须保留元素的顺序,[4,5]与[5,4]不同。

注2:也可以这样理解问题:我们需要A的最短扩展,以便输出以B结尾。

当然,我可以遍历第二个数组并逐个元素进行比较,但是我正在寻找一个不错的Numpy解决方案。

Vid*_*dak 1

我有一个O(n)解决方案,尽管没有 Numpy:

def merge(a, b):
    n_a = len(a)
    n = min(n_a, len(b))
    m = 0
    for i in range(1, n + 1):
        if b[n - i] == a[n_a - 1 - m]:
            m += 1
        else:
            m = 0
    return a + b[m:]
Run Code Online (Sandbox Code Playgroud)