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