Проблема с определением последовательности на Python
Вводится список чисел, найти в нем самую длинную неубывающую цепочку чисел, в которой каждый элемент не превосходит 50. Я решил так, но не при всех вводных данных оно считает правильно (например, при последовательности 2 3 1 3 4 5 6 3 2 1 выводит верно, в остальных случаях - нет). У меня вся программа не на той логике построена или где-то незначительная ошибка?
import copy
a = []
n = int(input())
for i in range(n):
a.append(int(input()))
max_len, current_len = 1, 1
spis1 = []
spis2 = []
for i in range(1, len(a)):
if a[i] >= a[i - 1] and a[i] < 50:
current_len += 1
max_len = max(max_len, current_len)
spis1.append(a[i - 1])
spis2 = spis1.copy()
c = a[i]
else:
current_len = 1
spis1.clear()
if spis1 != spis2:
spis2.append(c)
print(spis2)
else:
spis1.append(c)
print(spis1)
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
current_len нужно назначать 1 только в случае, если элемент не превосходит 50.
Не вижу смысла хранить целый список с хорошей последовательностью - достаточно знать место и длину.
import random
a = [random.randint(20,55) for _ in range(random.randint(5,15))]
print(a)
if a[0] <= 50:
max_len, current_len, max_end = 1, 1, 0
else:
max_len, current_len, max_end = 0, 0, -1
for i in range(1, len(a)):
if (a[i] >= a[i - 1]) and (a[i] <= 50):
current_len += 1
if current_len > max_len:
max_len = current_len
max_end = i
else:
current_len = 1 if a[i] <= 50 else 0
if current_len > max_len:
max_len = current_len
max_end = i
if max_len:
print(max_len, a[max_end - max_len + 1: max_end+1])