Программа Python прекращена из-за тайм-аута

Я пытаюсь решить вопрос от hackerrank, и когда я отправляю свое решение, я получаю сообщение об ошибке «Прекращено из-за тайм-аута».

Пожалуйста, проверьте код и предложите мне, как его оптимизировать.

Утверждение: у вас есть пустая последовательность, и вам будут заданы запросы. Каждый запрос относится к одному из этих трех типов:

1 x - Поместить элемент x в стек. 2 -Удалить элемент, присутствующий в верхней части стека. 3 -Выведите максимальный элемент в стеке.

Формат ввода

Первая строка ввода содержит целое число . Каждая из следующих строк содержит вышеупомянутый запрос. (Гарантируется, что каждый запрос действителен.)

Формат вывода

Для каждого типа запроса выведите максимальный элемент в стеке на новой строке.

Пример ввода

10 1 97 2 1 20 2 1 26 1 20 2 3 1 91 3

Пример вывода

26 91

Мой код:

n = int(input())
stack = []

for i in range(n):
     l = list(map(int,input().split(" ")))
     if l[0] == 1:
        stack.append(l[1])
    elif l[0] == 2:
        stack.pop()
    elif l[0] == 3:
        print(max(stack))  

person Sai Raman Kilambi    schedule 12.12.2016    source источник
comment
ваш sample input неполный или неправильно отформатирован, я думаю. пожалуйста, разместите это правильно   -  person anekix    schedule 12.12.2016
comment
Я часто вижу проблемы с хакерским рангом, которые не являются явными в отношении крайних случаев и их ответа: может ли n быть 0? Может ли запрос 3 произойти в пустом стеке? Если на входе нет 3, вам нужно напечатать что-то особенное?   -  person polku    schedule 12.12.2016
comment
@ Раман, ты нашел ответ?   -  person Farheen Nilofer    schedule 04.07.2017
comment
@FarheenNilofer Нет, я пробовал все предложенные решения, но результат все тот же.   -  person Sai Raman Kilambi    schedule 06.07.2017


Ответы (2)


Если я правильно понимаю, вы указываете счетчик i, но никогда его не используете. Это не приведет к выводу или чему-либо еще, если ваш первый ввод не является одной из команд, которой, очевидно, не является.

n = int(input())
stack = []

for i in range(n):
     l = list(map(int,input().split(" ")))
     if l[i] == 1:
        stack.append(l[i+1])
    elif l[i] == 2:
        stack.pop()
    elif l[i] == 3:
        print(max(stack))  
person Lukas Kerbs    schedule 12.12.2016
comment
прочитайте формат ввода, он говорит, что The first line of input contains an integer, . The next lines each contain an above mentioned query. (It is guaranteed that each query is valid.) пример ввода, который был упомянут в вопросе, не был правильно отформатирован. - person anekix; 12.12.2016
comment
Ваш код неверен, потому что l состоит из 1 или 2 элементов после того, как split() выполняет свою работу. Таким образом, указание l[i] вызовет ошибку «индекс списка вне диапазона» - person Sai Raman Kilambi; 12.12.2016
comment
@ Раман, ты проверил мой код? если это правильно, вы должны принять это как ответ - person anekix; 13.12.2016
comment
Ах да, ты прав @Raman. Что, если вы уберете разбиение из цикла for и создадите полный массив со всеми знаками? Затем возьмите длину этого массива (l) вместо n, и все должно работать. Или я опять где-то ошибаюсь? - person Lukas Kerbs; 13.12.2016

Вот правильный ввод с ожидаемым результатом.

"""
    proper input format for you problem
    10
    1 97
    2
    1 20
    2
    1 26
    1 20
    2
    3
    1 91
    3
    """

    n = int(raw_input())
        stack = []
        while n > 0:
            # read the option here it may be of form 1 x or 2 or 3
            option = map(int,raw_input().split())
            # if it has two elements that means it was of form 1 x,
            # so, push the second element on stack (stack[1])
            if len(option) > 1:
                stack.append(option[1] )
            else:
                # if option is 2 there will only be one element 
                # in option ( which is option[0]
                # so, remove from top of stack
                if option[0] == 2:
                    del stack[-1]
                else:
                    print max(stack)
            n = n-1
person anekix    schedule 12.12.2016