找出栈中最小元素 の 双栈实现

来源:互联网 发布:java multieditor 编辑:程序博客网 时间:2024/06/17 22:49

虽然在面试宝典中,声称这是一个用O(1)时间复杂度实现求栈中最小元素的解法。

但是,不管怎么说还是遍历了栈,我不承认。再见


/** *  */package dianer;import java.util.Stack;/** * * @author LilyLee * @date  2017年3月19日 * @Version  *题目:来自《面试宝典》 *如何使用O(1)的时间复杂度求栈中最小元素 * *【然而我觉得这个有点儿伪命题的感觉】 *【无论如何还是要过一遍全部元素,有区别吗?】 *//* * 因为栈的push和pop操作都是针对栈顶元素的, * 所以一般如果想要获得最小元素,需要遍历栈中所有元素找出最小值,这样的话时间复杂度是O(n)。 *  * 所以想要减小时间复杂度,需要 “空间换时间”、 *  * 具体而言: * 定义一个主栈和一个辅栈, * 主栈执行的是push压栈的操作, 用一个min来记录当前的最小值, * 用一个辅栈来保存最小元素,保证辅栈的栈顶元素始终为最小值。 *  * * */public class min_Stack {private Stack<Integer> stack=new Stack<Integer>();private Stack<Integer> minStack=new Stack<Integer>();public static void main(String[] args) throws Exception {min_Stack  minstack=new min_Stack();minstack.push(3);minstack.push(4);minstack.push(9);System.out.println("min="+minstack.min());}public void push(int data){stack.push(data);if(minStack.size()==0 || minStack.peek()>data)minStack.add(data);else{int date=minStack.peek();minStack.add(date);}}public int pop() throws Exception{if(stack.size()==0){return Integer.MAX_VALUE;}int data=stack.pop();int mindata=minStack.pop();return data;}public Object min() throws Exception{if(minStack.size()==0){return null;}return minStack.peek();}}


0 0