微软100题40题-设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)。

来源:互联网 发布:linux把用户从组中删除 编辑:程序博客网 时间:2024/06/06 09:34
/** * <p>File:Test_40.java</p> * <p>Title: </p> * <p>Description:</p> 40.百度研发笔试题(栈、算法)引用自:zp1553348771)设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)。2)一串首尾相连的珠子(m个),有N种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。3)设计一个系统处理词语搭配问题,比如说 中国 和人民可以搭配,则中国人民 人民中国都有效。要求:  *系统每秒的查询数量可能上千次;  *词语的数量级为10W;  *每个词至多可以与1W个词搭配当用户输入中国人民的时候,要求返回与这个搭配词组相关的信息。 */public class Test_40_1{    public static  class Stack{        private int [] popPushArray=new int[1024];        private int indexPopPush=-1;        private int[] minArray=new int[1024];        private int indexMin=-1;                public void push(int value){            indexPopPush++;            popPushArray[indexPopPush]=value;            if(indexMin==-1){                indexMin++;                minArray[indexMin]=value;            }else{                if(minArray[(indexMin)]>value){                    indexMin++;                    minArray[indexMin]=value;                }            }        }                public Integer pop(){            if(indexPopPush==-1){                return null;            }            int value=popPushArray[indexPopPush];            indexPopPush--;            if(value==minArray[indexMin]){                indexMin--;            }            return value;        }                public Integer min(){            if(indexMin<0){                return null;            }            int value=minArray[indexMin];            indexMin--;            return value;        }    }    public static void main(String[] args)    {        Stack s=new Stack();        s.push(1);        s.push(-1);        s.push(10);        s.push(-2);        s.pop();        s.push(-3);        s.push(3);        s.pop();        s.pop();        System.out.println(s.pop());        System.out.println(s.min());    }}

0 0