来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-stack/

描述

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) — 将元素 x 推入栈中。
pop() — 删除栈顶的元素。
top() — 获取栈顶元素。
getMin() — 检索栈中的最小元素。

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

题解

  1. class MinStack {
  2. private List<Integer> nums;
  3. private int min;
  4. /** initialize your data structure here. */
  5. public MinStack() {
  6. nums = new LinkedList<>();
  7. min = Integer.MAX_VALUE;
  8. }
  9. public void push(int x) {
  10. nums.add(x);
  11. min = Math.min(x, min);
  12. }
  13. public void pop() {
  14. if (!nums.isEmpty()) {
  15. if (min == nums.remove(nums.size() - 1)) {
  16. min = Integer.MAX_VALUE;
  17. for (int num : nums) {
  18. if (num < min) min = num;
  19. }
  20. }
  21. }
  22. }
  23. public int top() {
  24. if (!nums.isEmpty()) {
  25. return nums.get(nums.size() - 1);
  26. } else {
  27. return 0;
  28. }
  29. }
  30. public int getMin() {
  31. return min;
  32. }
  33. }
  34. /**
  35. * Your MinStack object will be instantiated and called as such:
  36. * MinStack obj = new MinStack();
  37. * obj.push(x);
  38. * obj.pop();
  39. * int param_3 = obj.top();
  40. * int param_4 = obj.getMin();
  41. */