Your programming language is more powerful than you think

Your programming language is more powerful than you think. Case in point: https://leetcode.com/problems/max-stack/

716. Max Stack
Easy
Design a max stack that supports push, pop, top, peekMax and popMax.
  1. push(x) -- Push element x onto stack.
  2. pop() -- Remove the element on top of the stack and return it.
  3. top() -- Get the element on the top.
  4. peekMax() -- Retrieve the maximum element in the stack.
  5. popMax() -- Retrieve the maximum element in the stack, and remove it. If you find more than one maximum elements, only remove the top-most one.
Example 1:
MaxStack stack = new MaxStack();
stack.push(5); 
stack.push(1);
stack.push(5);
stack.top(); -> 5
stack.popMax(); -> 5
stack.top(); -> 1
stack.peekMax(); -> 5
stack.pop(); -> 1
stack.top(); -> 5
Note:
  1. -1e7 <= x <= 1e7
  2. Number of operations won't exceed 10000.
  3. The last four operations won't be called when stack is empty.

Usually a good alternative to building a boundless stack is to use a Linked List, managing the two pointers (top-most and bottom-most). One can do that by hand and implement all the Max Stack functions asked above (when it comes to popMax(), there will be some small difficulties but they can be overcome).
However, in my case where I use C#, you can make use of the LinkedList<int> pre-built class and make use of all its wonderful and powerful methods - surprisingly, it pretty much already has all the lego block pieces that you need. Code is below, cheers, ACC.


public class MaxStack
{
    private LinkedList<int> stack = null;
    /** initialize your data structure here. */
    public MaxStack()
    {
        stack = new LinkedList<int>();
    }

    public void Push(int x)
    {
        stack.AddFirst(x);
    }

    public int Pop()
    {
        int retVal = stack.First.Value;
        stack.RemoveFirst();
        return retVal;
    }

    public int Top()
    {
        return stack.First.Value;
    }

    public int PeekMax()
    {
        return stack.Max();
    }

    public int PopMax()
    {
        int max = PeekMax();
        stack.Remove(max);
        return max;
    }
}

Comments

Popular posts from this blog

Advent of Code - Day 6, 2024: BFS and FSM

Golang vs. C#: performance characteristics (simple case study)

Advent of Code - Day 7, 2024: Backtracking and Eval