用时间复杂度O(1)的算法求栈中的最小元素

来源:互联网 发布:淘宝店友情链接怎么弄 编辑:程序博客网 时间:2024/06/03 04:02

总体思想是以空间来换时间,设置两个栈,其中一个栈放元素,一个栈放最小的值,在push时,判断新push进去的元素和原先栈中的元素哪个小,小的才有资格入栈;在pop元素时候,要记得将存放最小值的栈的栈顶元素也pop出来。很简单。栈的实现用链表的实现方式。

/* * 用O(1)的时间复杂度求栈中的最小元素 */public class MyStack1 {    LinkedStack<Integer>elem;    LinkedStack<Integer>min;    public MyStack1(){        elem=new LinkedStack<Integer>();        min=new LinkedStack<Integer>();    }    public void push(int data){        elem.push(data);        if(min.isEmpty()){            min.push(data);                 }else{            if(data<min.peek()){                min.push(data);            }        }    }    public int pop(){    int topdata=elem.peek();    elem.pop();    if(topdata==min.peek()){        min.pop();    }    return topdata;    }    public int min(){        if(min.isEmpty()){            return Integer.MAX_VALUE;        }        return min.peek();    }public static void main(String[] args){     MyStack1 newstack=new MyStack1();    newstack.push(1);    newstack.push(2);    newstack.push(3);    newstack.pop();    System.out.print(newstack.min());//print 1}}
0 0
原创粉丝点击