需要在时间复杂度O(1)内完成查找最小值,需要定义两个栈,一个现有值栈,一个最小值栈入栈:如果新入栈的元素小于最小值栈的栈顶,那么不仅将新元素入现有值栈也要入最小值栈出栈:如果两个栈的栈顶元素相同,那么均出栈,否则只要出栈现有值栈
package cn.njupt.demo3;import java.util.Stack;public class Stack1 { private Stack<Integer> myStack=new Stack<>(); private Stack<Integer> minStack=new Stack<>(); //一个现有值栈,一个最小值栈 public void push(int node) { myStack.push(node); if(minStack.isEmpty() || node<minStack.peek()){ minStack.push(node); } } public void pop() { if(myStack.peek()==minStack.peek()){ myStack.pop(); minStack.pop(); } else{ myStack.pop(); } } public int top() { return myStack.peek(); } public int min() { return minStack.peek(); }}