Each day I solve several coding challenges and puzzles from Codr's ranked mode. The goal is to reach genius rank, along the way I explain how I solve them. You do not need any programming background to get started, and you will learn a ton of new and interesting things as you go.
function MinStack() { this.stack = [] this.MS = [] }; MinStack.prototype.push = function(x) { this.stack.push(x) if (this.MS.length == 0 || x <= this.MS[this.MS.length - 1]) { this.MS.push(x) } }; MinStack.prototype.pop = function() { const x = this.stack.pop() if (x !== void 0 && x === this.MS[this.MS.length - 1]) { this.MS.pop() } }; MinStack.prototype.top = function() { return this.stack[this.stack.length - 1] }; MinStack.prototype.min = function() { return this.MS[this.MS.length - 1] }; var obj = new MinStack() obj.push(20) obj.push(15) obj.push(16) obj.push(3) obj.push(18) let A = obj.top() + obj.min(); // A = ? (number)
In today's challenge we are looking at some kind of special "stack" class called MinStack
.
The last few lines of code is what we have to analyze: first the code pushes a bunch of numbers to this stack, finally it's asking for the answer:
obj = MinStack() obj.push(...) A = obj.top() + obj.min() // A = ?
The constructor of MinStack
creates two empty arrays MS
and stack
, so that's all there is to it. The push function adds the argument to the stack
array, and if the number satisfies the if-condition it's also added to MS
. This particular condition checks if MS
is empty, or that the latest element in MS
is greater than or equal to the number. In a nutshell this adds the number to MS
if it's smaller than the latest number inside (or if it's empty of course). Hence the name MinStack
, it's keeping track of the smallest numbers in the stack structure.
Here's some pseudo-code that to help us solve the challenge:
stack = [] MS = [] push(20) stack = [20] MS = [20] push(15) stack = [20, 15] MS = [20, 15] push(16) stack = [20, 15, 16] MS = [20, 15] push(3) stack = [20, 15, 16, 3] MS = [20, 15, 3] push(18) stack = [20, 15, 16, 3, 18] MS = [20, 15, 3] A = top() + min() A = 18 + 3 a = 21
By solving these challenges you train yourself to be a better programmer. You'll learn newer and better ways of analyzing, debugging and improving code. As a result you'll be more productive and valuable in business. Get started and become a certified Codr today at https://nevolin.be/codr/
Top comments (0)