Найти начало и конец самой длинной последовательности максимумов в списке

Дан список-массив, заполненный случайным образом нулями и единицами. Найти самую длинную непрерывную последовательность единиц и определить индексы первого и последнего элементов в ней.

Решение задачи:

  1. Пусть переменная count содержит текущее значение количества единиц, а max_count - максимально найденное на данный момент. Переменная index хранит индекс последнего элемента в самой длинной на данный момент последовательности единиц.
  2. Если очередной элемент 0, то переменная count обнуляется. Однако перед этим ее значение сравнивается с max_count и, если count больше, то max_count перезаписывается на него. В index помещается индекс последнего элемента найденной последовательности единиц.
  3. При выводе данных на экран, чтобы получить индекс первого элемента последовательности, надо из последнего вычесть уменьшенную на единицу длину последовательности.
import random
 
a = []
for i in range(50):
	n = int(random.random() * 2)
	a.append(n)
	print(n,end=' ')
	if (i+1) % 10 == 0: print()
 
count = 0
max_count = 0
index = 0
i = 0 
while i < len(a):
	if a[i] == 1:
		count += 1
	else:
		if count > max_count:
			max_count = count
			index = i-1 # последовательность закончилась на предыдущем элементе
		count = 0
	i += 1
 
print("Количество элементов: ", max_count)
print("id первого элемента: ", index-max_count+1)
print("id последнего элемента: ", index)

Пример выполнения кода:

1 0 1 0 0 1 0 1 1 0 
1 1 0 0 1 1 1 1 1 0 
1 1 1 1 0 0 1 1 0 1 
0 0 0 0 1 1 0 1 1 0 
1 1 0 1 0 0 0 0 0 1 
Количество элементов:  5
id первого элемента:  14
id последнего элемента:  18

Комментарии

это решение сделано не-правильно допустили ошибку вот моё решение оно правильное проверенное
ed = [1,0,1,1,1,0,0,0,1,1,1,1]
smax =[[]]
sind =[[]]
t=0
for i in range(len(ed)):
    if ed[i] == 1:
        smax[t].append( 1)
        sind[t].append(i)
    if ed[i] == 0 and ed[i-1]==1:
        smax.append([])
        sind.append([])
        t+=1
 
 
 
kol =[]
go = []
for tr in range(len(smax)):
    if kol < smax[tr]:
        kol = smax[tr]
 
 
for ft in range(len(sind)):
    if len(go) < len(sind[ft]):
        go = sind[ft]
 
 
print(kol)        
print(go[0],go[-1])        
мы используем четыри списка список индексов и едениц мы делаем список едениц и добовляем еденицу если мы стаим на нуле а предэдущий была еденица мы в список едениц добовляем список после вычеслений мы делаем две новых переменых одна для того что бы мы найти в списке едениц находим самый большой список едениц тоже самое делаем с индексами только мы сравниваем длины