Извлечение подпоследовательности целых чисел
На данный момент у меня есть этот кусок кода, который работает путем извлечения подпоследовательности целых чисел, которые идут в порядке возрастания на наибольшую длину
def sequence(n):
longSeq = []
curSeq = []
for i in range( len(n) ):
if i < len(n) - 1 and n[i] <= n[i+1]:
curSeq.append(n[i])
else:
curSeq.append(n[i])
if len(curSeq) > len(longSeq):
longSeq = curSeq
curSeq = []
print ('Longest sub-sequence of maxiumum length of integers is: ', longSeq)
sequence([1,2,4,1,2,3,2,4,7,8,10,12,1,3,4,5,6,7])
Однако, когда у меня есть две подпоследовательности в порядке возрастания, которые имеют одинаковую длину, он будет распечатывать только 1, как я могу изменить это так, что, если есть две подпоследовательности одинаковой длины, он распечатает обе? Любая помощь приветствуется
Поэтому, когда я запускаю его, я получаю
Самая длинная подпоследовательность максимальной длины целых чисел: [2, 4, 7, 8, 10, 12]
1 ответ
Решение
Иметь цикл, который находит все последовательности, отслеживать длину самой длинной последовательности, а затем возвращать все последовательности этой длины.
def long_sequences(n):
long_sequences = []
cur_sequence = []
longest_sequence = 0
for ind, val in enumerate(n):
cur_sequence.append(val)
if ind < len(n)-1 and val >= n[ind+1]:
long_sequences.append(cur_sequence)
longest_sequence = max(longest_sequence, len(cur_sequence))
cur_sequence = []
long_sequences.append(cur_sequence) # to grab last one
longest_sequence = max(longest_sequence, len(cur_sequence))
return [seq for seq in long_sequences if len(seq) == longest_sequence]
>>> long_sequences([1,2,4,1,2,3,2,4,7,8,10,12,1,3,4,5,6,7])
[[2, 4, 7, 8, 10, 12], [1, 3, 4, 5, 6, 7]]