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

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

    1. 输入:
    2. ["MinStack","push","push","push","getMin","pop","top","getMin"]
    3. [[],[-2],[0],[-3],[],[],[],[]]
    4. 输出:
    5. [null,null,null,null,-3,null,0,-2]
    6. 解释:
    7. MinStack minStack = new MinStack();
    8. minStack.push(-2);
    9. minStack.push(0);
    10. minStack.push(-3);
    11. minStack.getMin(); --> 返回 -3.
    12. minStack.pop();
    13. minStack.top(); --> 返回 0.
    14. minStack.getMin(); --> 返回 -2.
    1. /**
    2. * 模拟栈
    3. * 时间复杂度:O(n)
    4. * 空间复杂度:O(n)
    5. */
    6. class MinStack {
    7. constructor() {
    8. this.stack = []
    9. }
    10. push(val) {
    11. this.stack.push(val)
    12. }
    13. pop() {
    14. return this.stack.pop()
    15. }
    16. top() {
    17. return this.stack[this.stack.length - 1]
    18. }
    19. getMin() {
    20. return Math.min(...this.stack)
    21. }
    22. }
    1. /**
    2. * 辅助栈
    3. * 时间复杂度:O(1)
    4. * 空间复杂度:O(n)
    5. */
    6. class MinStack {
    7. constructor() {
    8. this.stack = []
    9. this.minStack = []
    10. }
    11. push(val) {
    12. this.stack.push(val)
    13. if (
    14. !this.minStack.length ||
    15. this.minStack[this.minStack.length - 1] >= val
    16. ) {
    17. this.minStack.push(val)
    18. } else {
    19. this.minStack.push(this.minStack[this.minStack.length - 1])
    20. }
    21. }
    22. pop() {
    23. this.stack.pop()
    24. this.minStack.pop()
    25. }
    26. top() {
    27. return this.stack[this.stack.length - 1]
    28. }
    29. getMin() {
    30. return this.minStack[this.minStack.length - 1]
    31. }
    32. }