题目描述:

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) — 将元素 x 推入栈中。
pop() — 删除栈顶的元素。
top() — 获取栈顶元素。
getMin() — 检索栈中的最小元素。
示例:

  1. MinStack minStack = new MinStack();
  2. minStack.push(-2);
  3. minStack.push(0);
  4. minStack.push(-3);
  5. minStack.getMin(); --> 返回 -3.
  6. minStack.pop();
  7. minStack.top(); --> 返回 0.
  8. minStack.getMin(); --> 返回 -2.

算法实现:

  1. /**
  2. * initialize your data structure here.
  3. */
  4. var MinStack = function() {
  5. this.stack = []
  6. this.min = Infinity
  7. };
  8. /**
  9. * @param {number} x
  10. * @return {void}
  11. */
  12. MinStack.prototype.push = function(x) {
  13. this.stack.push(x)
  14. this.min = Math.min(this.min, x)
  15. };
  16. /**
  17. * @return {void}
  18. */
  19. MinStack.prototype.pop = function() {
  20. let pop = this.stack.pop()
  21. if (this.min === pop) {
  22. this.min = Math.min(...this.stack)
  23. }
  24. };
  25. /**
  26. * @return {number}
  27. */
  28. MinStack.prototype.top = function() {
  29. return this.stack[this.stack.length - 1]
  30. };
  31. /**
  32. * @return {number}
  33. */
  34. MinStack.prototype.getMin = function() {
  35. return this.min
  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.getMin()
  44. */

思考:

没有使用辅助栈的方式,由于除了getMin操作,其他都是数组和栈的基本操作,所以只要搞定min就可以了,min直接再出栈和入栈的时候用Math.min函数就可以搞定,所以很简单就可以得出结果。

总结:

应用了栈的基本操作,辅助栈的方法也值得看一下。