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

 

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