题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49

解题想法

思路一:使用两个栈,栈 A 保存元素,栈 B 保存此时栈 A 的最小值。

每添加一个元素时,判断添加的元素值与栈 B 顶部元素做比较,然后把最小值加在 B 的顶部。

时间复杂度 O(1),空间复杂度 O(N)

代码实现

  1. import java.util.Stack;
  2. public class Solution {
  3. Stack<Integer> stack = new Stack<>();
  4. Stack<Integer> stackMin = new Stack<>();
  5. public void push(int node) {
  6. stack.push(node);
  7. // 原来是空,那么最小值就是刚加入的值
  8. if(stackMin.isEmpty()){
  9. stackMin.push(node);
  10. }else{
  11. int temMin = stackMin.peek();
  12. // 将最小值插到顶部
  13. if(temMin > node){
  14. stackMin.push(node);
  15. }else{
  16. stackMin.push(temMin);
  17. }
  18. }
  19. }
  20. public void pop() {
  21. stack.pop();
  22. stackMin.pop();
  23. }
  24. public int top() {
  25. return stack.peek();
  26. }
  27. public int min() {
  28. return stackMin.peek();
  29. }
  30. }