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
テストが正しいコードを書くのに長い時間がかかりました.
タイトルの要求は:一連の数字(スペースで区切られている)を入力して、この数字のリストの最も長い連続シーケンスを算出して、ここの連続シーケンスの意味は:連続した数字が存在する(後ろの数は前の数より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