剑指 Offer 30. 包含min函数的栈

难度简单
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

示例:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); —> 返回 -3. minStack.pop(); minStack.top(); —> 返回 0. minStack.min(); —> 返回 -2.

提示:

  1. 各函数的调用总次数不超过 20000 次
  1. /**
  2. * initialize your data structure here.
  3. */
  4. var MinStack = function() {
  5. //x_stack用来存储新的数据
  6. //min_stack用来存储每一位数据对应的状态下的最小值
  7. this.x_stack = []
  8. this.min_stack = [Infinity]
  9. };
  10. /**
  11. * @param {number} x
  12. * @return {void}
  13. */
  14. MinStack.prototype.push = function(x) {
  15. this.x_stack.push(x)
  16. this.min_stack.push(Math.min(this.min_stack[this.min_stack.length-1],x))
  17. };
  18. /**
  19. * @return {void}
  20. */
  21. MinStack.prototype.pop = function() {
  22. this.x_stack.pop()
  23. this.min_stack.pop()
  24. };
  25. /**
  26. * @return {number}
  27. */
  28. MinStack.prototype.top = function() {
  29. return this.x_stack[this.x_stack.length-1]
  30. };
  31. /**
  32. * @return {number}
  33. */
  34. MinStack.prototype.min = function() {
  35. return this.min_stack[this.min_stack.length-1]
  36. };
  37. /**
  38. * Your MinStack object will be instantiated and called as such:
  39. * var obj = new MinStack()
  40. * obj.push(x)
  41. * obj.pop()
  42. * var param_3 = obj.top()
  43. * var param_4 = obj.min()
  44. */