Python求解最長連續序列的問題!

第一次做算法題,真的很難!

題目要求是:輸入一系列數字(以空格分開),算出這個數字列表的最長的連續序列,這裏的連續序列的意思是:存在連續的數字(後面的數比前面的數大1),eg:輸入的數是:3520 4 3 89 56 88 3521 9 90 1 99 2 87

得到的連續序列有三個:分別是——1,2,3,4/87,88,89,90/3520,3521,但是最長的連續序列只有前兩個,長度是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("\n")
            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("\n")
                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("\n")
                num += 1
        break

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章