Pythonは最長連続シーケンスの問題を解く!

2487 ワード

初めてアルゴリズムの問題をして、本当に難しいです!
タイトルの要求は:一連の数字(スペースで区切られている)を入力して、この数字のリストの最も長い連続シーケンスを算出して、ここの連続シーケンスの意味は:連続した数字が存在する(後ろの数は前の数より1大きい)、eg:入力した数は:3520 4 3 89 56 88 3521 9 90 1 99 2 87
得られた連続シーケンスは,それぞれ1,2,3,4/87,88,89,90/35203,521であったが,最長の連続シーケンスは上位2つのみで,長さは4であった.
次に,得られた最長連続シーケンスの長さと具体的な構成をoutに書く必要があると題する.txtファイルに!次のように表示されます.
 
入力:
3520 4 3 89 56 88 3521 9 90 1 99 2 87
出力:
4 1,2,3,4 87,88,89,90
テストが正しいコードを書くのに長い時間がかかりました.
arrs = list(input('').split(' '))
x = []
for arr in arrs:
    x.append(int(arr))
# 3520 4 3 89 56 88 3521 9 90 1 99 2 87
f = open('out.txt',mode="w",encoding='utf-8')
counts = []
for i in range(0,len(x)-1):
    if (sorted(x)[i] == sorted(x)[i + 1] - 1):
        counts.append(i)
    else:
        num1 = 0
for i in range(1,len(x)):
    if(sorted(x)[i-1] + 1 == sorted(x)[i]):
        counts.append(i)
    else:
        num1 = 0
counts = list(set(counts))
results = []
for i in range(len(counts)):
    if (i == 0):
        pass
    else:
        if(counts[i] - counts[i-1] != 1):
            results.append(i)
#            
for i in range(len(results)):
    max1 = results[0]
    if (len(results) == 0):
        print(0)
    else:
        max1 = max(max1,results[i]-results[i-1])
        with open('out.txt',mode="w",encoding="utf-8") as f:
            f.write(str(max1))
            f.write("
") print(max1) f.close() num = 0 for i in range(len(results)): if num == 0: end = [] for j in range(int(results[0])): f = open('out.txt', mode="a+", encoding="utf-8") f.write(str(sorted(x)[j])) end.append(str(sorted(x)[j])) f.write(" ") f.write("
") num += 1 print(','.join(end)) else: end = [] for j in range(counts[int(results[num-1])],counts[int(results[num])]-1): f = open('out.txt', mode="a+", encoding="utf-8") f.write(str(sorted(x)[j])) end.append(str(sorted(x)[j])) f.write(" ") print(','.join(end)) f.write("
") num += 1 break