python - 如何在 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
解决方案
您可以只遍历两个列表并将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
与两个列表的长度有关。
推荐阅读
- postgresql - SequelizeJS:使用数字作为字符串时列值的顺序错误
- swift - Firebase 数据加载速度比 UITableView 慢
- python - 如何检查消息是否在正确的频道中发送
- unix - Vim 在服务器中的行为不正常
- ruby-on-rails - Ruby 2.5.1、Rails 5.1.6、HTTParty 帖子返回 OpenSSL 错误
- javascript - 如何在页面的多个位置使用相同的组件实例 - Vue2
- jquery - 动画 CSS 更改 (jQuery)
- sql - 与 PROCEDURE 相关的 SQL Oracle 问题
- dart - 如何根据 3 个项目对 Dart 集合进行排序?
- php - How to fetch Value from a HTML Table in laravel