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:

function Stack() { // initialize an empty array this.items = []; } // push a new item to the last index Stack.prototype.push = function(item) { this.items.push(item); }; // remove the last item Stack.prototype.pop = function() { // if the stack is empty, return null // (it would also be reasonable to throw an exception) if (!this.items.length) { return null; } return this.items.pop(); }; // see what the last item is Stack.prototype.peek = function() { if (!this.items.length) { return null; } return this.items[this.items.length -1]; };

Use your Stack class to implement a new class MaxStack with a function getMax that returns the largest element in the stack. getMax 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 getMax.

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 getMax. 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?

RUN
Code execution powered by Qualified.io

. . .