[关闭]
@XQF 2018-03-07T14:52:42.000000Z 字数 528 阅读 1785

如何用O(1)的复杂度求出栈中的最小值

数据结构与算法


使用两个栈,一个装数据,一个装最小值。
当pop()数据栈的时候,最小值栈也要pop。

自实现栈的时候,否则没有多大用处

  1. class MyStack1 {
  2. MyStack<Integer> stackValues;
  3. MyStack<Integer> stackMin;
  4. int min;
  5. public MyStack1() {
  6. stackValues = new MyStack<>();
  7. stackMin = new MyStack<>();
  8. min = Integer.MAX_VALUE;
  9. }
  10. public void push(int i) {
  11. if (i < min) {
  12. min = i;
  13. stackMin.push(min);
  14. }
  15. stackValues.push(i);
  16. }
  17. public Integer pop() {
  18. if (stackValues.peek().equals(stackMin.peek())) {
  19. stackMin.pop();
  20. }
  21. return stackValues.pop();
  22. }
  23. public Integer min() {
  24. if (stackValues.isEmpty()) {
  25. return Integer.MAX_VALUE;
  26. }
  27. return stackMin.peek();
  28. }
  29. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注