Есть два пути решения этой проблемы, либо вы можете сделать функцию get_max
, которая дает максимальное число в стеке , или вы можете сохранить дополнительную информацию, с помощью которой вы можете указать максимальное количество в стеке в O(1)
, но за счет extra space
. Я дам вам последнее решение.
Что вам нужно сделать, это иметь extra stack
, который будет иметь максимальный элемент стека наверху, для любой конфигурации стека.
- Всякий раз, когда вы нажимаете номер вашего первоначального стека, выполните следующие действия для
max_stack
, сравните текущее значение с верхней max_stack и нажать одну большую на него.
- Когда появляется ряд просто вытолкнуть верхний номер из
max_stack
- Когда вам нужно узнать значение
max
просто выбрать вершину стека из max_stack
.
Таким образом, вы можете получить максимальное количество в O(1)
времени и нажимные и поп-операции также остаются O(1)
. Я мог бы дать вам код, но в нем нет ничего особенного, поскольку он прямолинейный. Например, если вы нажимаете следующие номера в порядке
5 - 2 - 6 - 8 - 1
max_stack
будет содержать
5 - 5 - 6 - 8 - 8
и как вы pop
чисел тока max
будет на самом верху.
Надеюсь, что решение понятно.
Вы имеете в виду «найти наибольшее количество, оставив стек в начальной конфигурации?» Можем ли мы иметь несколько стеков? – templatetypedef
Предположительно вы также можете использовать сравнения - в противном случае поиск максимума будет немного сложным ;-) Кроме того, вам понадобится тестовая проверка стека - иначе, как вы могли бы сказать, когда у вас есть все данные. Существуют ли какие-либо другие ограничения (т. Е. Нужно ли восстановить стек в исходное состояние? –
Да, первоначальная конфигурация не изменится. Мы также можем использовать еще один стек. –