Найти начало и конец самой длинной последовательности максимумов в списке
Дан список-массив, заполненный случайным образом нулями и единицами. Найти самую длинную непрерывную последовательность единиц и определить индексы первого и последнего элементов в ней.
Решение задачи:
- Пусть переменная count содержит текущее значение количества единиц, а max_count - максимально найденное на данный момент. Переменная index хранит индекс последнего элемента в самой длинной на данный момент последовательности единиц.
- Если очередной элемент 0, то переменная count обнуляется. Однако перед этим ее значение сравнивается с max_count и, если count больше, то max_count перезаписывается на него. В index помещается индекс последнего элемента найденной последовательности единиц.
- При выводе данных на экран, чтобы получить индекс первого элемента последовательности, надо из последнего вычесть уменьшенную на единицу длину последовательности.
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
Комментарии
задача
грамотность
Ответ на задача от матвей 33