[#] Списки, кортежи
vit01(mira, 1) — All
2015-12-04 04:13:39


Дан список-массив, заполненный случайным образом нулями и единицами. Найти
самую длинную непрерывную последовательность единиц и определить индексы
первого и последнего элементов в ней.
**Решение задачи:**
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