Решаю задачку Хирьянова:
В некотором физическом эксперименте показания прибора снимались с частотой 5 измерений в секунду. Эксперимент проводился в течение довольно большого времени, и в результате накопилось очень много данных. Ученых, которые проводили данный эксперимент, очень интересует, какое максимальное значение измеряемой величины достигалось во время измерения. Но вот беда: на остановку установки также требуется секунда времени, и в течение этого времени с установки могут приходить совершенно любые значения величины. В связи с этим, показания последних 5 измерений учитывать при поиске максимального значения не следует.
Вам необходимо написать программу, которая в данном потоке чисел заранее неизвестной длины находит максимальное значение, отбрасывая при этом последние 5 измерений.
Формат входных данных
На вход вашей программе передается последовательность натуральных чисел – результаты измерений. Каждое новое число передается с новой строки. Гарантируется, что длина входной последовательности не меньше 6 и не превосходит 10 9 . На конце последовательности передается число 0.
Формат выходных данных
Программа должна вывести на экран одно число – максимальное значение входной последовательности за исключением последних 5 элементов.
Сначала решил так:
A = [] k = int(input()) A.append(k) for i in A: k = int(input()) if k == 0: for i in range(5): A.pop(-1) break A.append(k) i += 1 print (max(A))
====== Тест #10 =======
— Входные данные: файл слишком велик, размер 9889191 —
— Результат работы: размер 0 —
— Поток ошибок: размер 86 —
Traceback (most recent call last):
File “./002583”, line 8, in <module>
MemoryError
Перерешал так (мысль была уменьшить список):
A = [] k = int(input()) A.append(k) for i in range(10000000000): k = int(input()) if k == 0: for i in range(5): A.pop(-1) break A.append(k) i += 1 if i > 10: x = max(A[0:4]) A = A[1:]+A[:1] A.pop(-1) A.append(x) A = A[-1:]+A[:-1] print (max(A))
Подскажите, пожалуйста, есть еще какой-нибудь метод (более оптимальный)?