这是在O(m+n)
wherem
和n
are 两个数组的长度中执行此操作的一种方法:
import random
def comm_seq(arr_1, arr_2):
if len(arr_1) == 0 or len(arr_2) == 0:
return []
m = len(arr_1) - 1
n = len(arr_2) - 1
if arr_1[m] == arr_2[n]:
return comm_seq(arr_1[:-1], arr_2[:-1]) + [arr_1[m]]
elif arr_1[m] < arr_2[n]:
return comm_seq(arr_1, arr_2[:-1])
elif arr_1[m] > arr_2[n]:
return comm_seq(arr_1[:-1], arr_2)
if __name__ == "__main__":
arr_1 = [random.randrange(0,5) for _ in xrange(10)]
arr_2 = [random.randrange(0,5) for _ in xrange(10)]
arr_1.sort()
arr_2.sort()
print comm_seq(arr_1, arr_2)
是否有一种在某些情况下使用少于O(m+n)
比较的技术?例如:arr_1=[1,2,2,2,2,2,2,2,2,2,2,100]
和arr_2=[1,3,100]
(不寻找哈希表实现)