LC: 716. Max Stack
716. Max Stack
Design a max stack data structure that supports the stack operations and supports finding the stack's maximum element.
Implement the MaxStack class:
MaxStack()Initializes the stack object.void push(int x)Pushes elementxonto the stack.int pop()Removes the element on top of the stack and returns it.int top()Gets the element on the top of the stack without removing it.int peekMax()Retrieves the maximum element in the stack without removing it.int popMax()Retrieves the maximum element in the stack and removes it. If there is more than one maximum element, only remove the top-most one.
Example 1:
Input
["MaxStack", "push", "push", "push", "top", "popMax", "top", "peekMax", "pop", "top"]
[[], [5], [1], [5], [], [], [], [], [], []]
Output
[null, null, null, null, 5, 5, 1, 5, 1, 5]
Explanation
MaxStack stk = new MaxStack();
stk.push(5); // [5] the top of the stack and the maximum number is 5.
stk.push(1); // [5, 1] the top of the stack is 1, but the maximum is 5.
stk.push(5); // [5, 1, 5] the top of the stack is 5, which is also the maximum, because it is the top most one.
stk.top(); // return 5, [5, 1, 5] the stack did not change.
stk.popMax(); // return 5, [5, 1] the stack is changed now, and the top is different from the max.
stk.top(); // return 1, [5, 1] the stack did not change.
stk.peekMax(); // return 5, [5, 1] the stack did not change.
stk.pop(); // return 1, [5] the top of the stack and the max element is now 5.
stk.top(); // return 5, [5] the stack did not change.Constraints:
-107 <= x <= 107At most
104calls will be made topush,pop,top,peekMax, andpopMax.There will be at least one element in the stack when
pop,top,peekMax, orpopMaxis called.
Follow up: Could you come up with a solution that supports O(1) for each top call and O(logn) for each other call?
The Essence:
Dieses Problem fordert den Problemlöser dazu, die Datenstruktur Stapelspeicher mit 2 zusätzlichen Methoden peekMax() und popMax() zu implementieren. Für diese Methode soll der Problemlöser berücksichtigen, wie das Maximum gespeichert werden kann.
Details:
Jedes Mal, wenn ein Element in den Stapel eingekellert wird, können wir das maximale Element in einem zusätzlichen Stack auch einkellern. Wir können auch eine effiziente Suchmethode finden, um jedes Mal das maximale Element zu finden, wenn
peekMax()oderpopMax()aufgerufen wird.
Solution:
Für die zweite Möglichkeit kann der Problemlöser die Linked List-Implementierung nachsehen, um detaillierte Informationen zu erhalten:
Default Code:
Last updated