Get a free weekly practice problem!

Keep that axe sharp.

× No thanks

Just No more free questions left!

Upgrade Now

You want to be able to access the largest element in a stack.

You've already implemented this Stack class:

class Stack: # initialize an empty list def __init__(self): self.items = [] # push a new item to the last index def push(self, item): self.items.append(item) # remove the last item def pop(self): # if the stack is empty, return None # (it would also be reasonable to throw an exception) if not self.items: return None return self.items.pop() # see what the last item is def peek(self): if not self.items: return None return self.items[-1]

Use your Stack class to implement a new class MaxStack with a method get_max that returns the largest element in the stack. get_max should not remove the item.

Your stacks will contain only integers.

What if we push several items in increasing numeric order (like 1, 2, 3, 4...), so that there is a new max after each push? What if we then pop each of these items off, so that there is a new max after each pop? Your algorithm shouldn't pay a steep cost in these edge cases.

You should be able to get a runtime of for push, pop, and get_max.

You must log in with one click to view the rest.

Once you're logged in, you'll get free full access to this and 4 other questions.

You must log in with one click to view the rest.

Once you're logged in, you'll get free full access to this and 4 other questions.

time for push, pop, and get_max. additional space, where m is the number of operations performed on the stack.

You must log in with one click to view the rest.

Once you're logged in, you'll get free full access to this and 4 other questions.

What's next?

Powered by qualified.io

. . .