Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Можете пожалуйста решить!!! срочно

пвро лор Ученик (84), на голосовании 2 месяца назад
Создай класс StackMax (Стек с максимумом) и реализуй в нем следующие методы:
push(item) – добавляет элемент в стек,
pop() – выводит на экран значение элемента из стека и удаляет его, если стек пуст, то вывести «error»,
size() – выводит на экран размер стека (количество элементов),
get_max() – выводит на экран максимальное значение стека, если стек пуст то вывести None.

Методы size() и get_max() должны выполняться за O(1), для этого вычисление размера стека и максимального элемента стека необходимо производить одновременно с операциями push() и pop().


С клавиатуры вводится одно целое число - количество команд. Затем вводятся сами команды в формате:
push x – команда добавляет элемент в стек и ничего не выводит,
pop – выводит на экран значение элемента стека и удаляет его, если стек пуст, то вывести «error»,
size – выводит на экран размер стека,
get_max – выводит на экран максимальное значение стека, если стек пуст то вывести None.

Входные данные:
Вводится одно целое число n - количество команд, затем n строк с командами.

Выходные данные:
Выводятся строки.

Пример ввода:
9
push 6
get_max
pop
push 5
push 8
size
get_max
pop
get_max


Пример вывода:
6
2
8
5
Голосование за лучший ответ
Kil002 Гуру (2535) 3 месяца назад
Ошибка в примере.
pop – выводит на экран значение элемента стека и ...
Вывод
6
6
2
8
8
5

Проверяй
 class StackMax:  
def __init__(self) -> None:
self.stack = []
self.stack_size = 0
self.max = 0

def push(self,item) -> int:
self.stack.append(item)
self.stack_size += 1
if self.max < item:
self.max = item

def pop(self,index) -> int:
if self.stack_size > 0 and self.stack_size > index:
aut = self.stack.pop(index)
self.stack_size -= 1
if self.max == aut and self.stack_size > 0:
self.max = max(self.stack)
return aut
else:
return "error"

def size(self) -> None:
print(self.stack_size)

def get_max(self) -> None:
print(self.max)



SM = StackMax()

for _ in range(int(input())):
command = input().split()

if command[0] == 'push':
SM.push(int(command[1]))
elif command[0] == 'pop':
print(SM.pop(command[1]) if len(command[0]) == 2 else SM.pop(-1))
elif command[0] == 'size':
SM.size()
elif command[0] == 'get_max':
SM.get_max()
else:
print('command error')
Похожие вопросы