これを行う 1 つの方法を次に示します。 O(m+n)
wherem
とn
are は 2 つの配列の長さです。
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]
(ハッシュテーブルの実装を探していません)