两个栈,一个存所有数据,一个维护栈顶最小。

    1. import java.util.Stack;
    2. public class Solution {
    3. // 元素栈;
    4. Stack<Integer> data = new Stack<Integer>();
    5. // 辅助栈;
    6. Stack<Integer> min = new Stack<Integer>();
    7. Integer change = null;
    8. public void push(int node) {
    9. if (change != null) {
    10. if (node <= change) {
    11. change = node;
    12. min.push(change);
    13. }
    14. data.push(node);
    15. } else {
    16. change = node;
    17. min.push(change);
    18. data.push(change);
    19. }
    20. }
    21. public void pop() {
    22. int num1 = data.pop();
    23. int num2 = min.pop();
    24. if (num1 != num2) {
    25. min.push(num2);
    26. }
    27. }
    28. public int top() {
    29. return data.peek();
    30. }
    31. public int min() {
    32. return min.peek();
    33. }
    34. }
    1. class Solution {
    2. public:
    3. stack<int> data;
    4. stack<int> dataMin;
    5. void push(int value) {
    6. if (!dataMin.empty()) {
    7. int curMin = dataMin.top();
    8. if (value < curMin) {
    9. dataMin.push(value);
    10. }
    11. } else {
    12. dataMin.push(value);
    13. }
    14. data.push(value);
    15. }
    16. void pop() {
    17. int curTop = data.top();
    18. data.pop();
    19. int curMin = dataMin.top();
    20. dataMin.pop();
    21. if (curMin != curTop) {
    22. dataMin.push(curMin);
    23. }
    24. }
    25. int top() {
    26. return data.top();
    27. }
    28. int min() {
    29. return dataMin.top();
    30. }
    31. };