首页 > 解决方案 > 如何在 Python 中将两个向量合二为一?

问题描述

我需要编写一个函数来接收已经按升序排序的两个数组(A[] 和 B[]),它的函数分配一个数组 C[],恰好是 A 和 B 的大小之和,并交错 A 的元素[] 和 B[] 在 C[] 中,所以数组 C[] 是按升序排列的。尽可能高效地编写函数。不是使用 Bubble 方法或 Insertion 连接数组和对数组 C[] 进行排序。

示例:A[] = { 1, 3, 6, 7} 和 B[] = {2, 4, 5},新向量为 C[] = { 1, 2, 3, 4, 5, 6, 7 }

我的代码没有停止运行,我做错了什么?

def union(v1, v2):
    c = [0, 0, 0, 0, 0, 0, 0, 0]
    auxv1 = 0
    auxv2 = 0
    i = 0
    j = 0
    k = 0
    while i < len(v1)-1:
        auxv1 = v1[i]
    while j < len(v2)-1:
        auxv2 = v2[j]
    while k < len(c):
        if auxv1 < auxv2:
            c[k] = auxv1
            i += 1
            k += 1
        else:
            c[k] = auxv2
            j += 1
            k += 1
    if i == len(v1)-1 and j == len(v2)-1:
        return c

标签: pythonarrayspython-3.x

解决方案


您可以只遍历两个列表并将c一个元素附加到列表中,a或者b根据哪个元素更小。
一个例子如下。

c=[]
i = j = 0

while True:
    if j == len(b):
        c+=a[i:]
        break
    elif i == len(a):
        c+=b[j:]
        break
    elif a[i] < b[j]:
        c.append(a[i])
        i+=1
    else:
        c.append(b[j])
        j+=1

这种方法的时间复杂度linear与两个列表的长度有关。


推荐阅读