题目描述:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
    思路:维护一个递减栈,并在添加和删除时同时对递减栈进行操作。

    1. const MinStack = function() {
    2. this.stack = [];
    3. // 定义辅助栈
    4. this.stack2 = [];
    5. };
    6. /**
    7. * @param {number} x
    8. * @return {void}
    9. */
    10. MinStack.prototype.push = function(x) {
    11. this.stack.push(x);
    12. // 若入栈的值小于当前最小值,则推入辅助栈栈顶
    13. if(this.stack2.length == 0 || this.stack2[this.stack2.length-1] >= x){
    14. this.stack2.push(x);
    15. }
    16. };
    17. /**
    18. * @return {void}
    19. */
    20. MinStack.prototype.pop = function() {
    21. // 若出栈的值和当前最小值相等,那么辅助栈也要对栈顶元素进行出栈,确保最小值的有效性
    22. if(this.stack.pop() == this.stack2[this.stack2.length-1]){
    23. this.stack2.pop();
    24. }
    25. };
    26. /**
    27. * @return {number}
    28. */
    29. MinStack.prototype.top = function() {
    30. return this.stack[this.stack.length-1];
    31. };
    32. /**
    33. * @return {number}
    34. */
    35. MinStack.prototype.getMin = function() {
    36. // 辅助栈的栈顶,存的就是目标中的最小值
    37. return this.stack2[this.stack2.length-1];
    38. };