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

原创 2015年07月09日 13:52:16
/**
 * <p>File:Test_40.java</p>
 * <p>Title: </p>
 * <p>Description:</p>
 40.百度研发笔试题(栈、算法)
引用自:zp155334877
1)设计一个栈结构,满足一下条件: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());
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【每日一题】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

这道题有两种实现方式 方法一:用两个栈来实现 两个栈实现的主要思路是,一个栈存放数据,一个栈存放最小值。 压栈操作: (1)我们先向S1压栈一个数据 (2)再向S1压入第二个数据,如果此...

【每日一题】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、 Min(返回最小值的操作)的时间复杂度为O(1)

题目:实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、 Min(返回最小值的操作)的时间复杂度为O(1) 解决方法:使用两个栈_data和_min,_min做为辅助栈(每次压入_mi...

栈和队列面试题(二)--- 实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作) 的时间复杂度为O(1)

一、 实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作) 的时间复杂度为O(1) (1)栈的基本操作入栈(push);出栈(pop);查找栈顶(top);栈的元素个数(...

【栈队列】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

问题分析要记录从当前栈顶到栈底元素的最小值,很容易想到用一个变量,每push一个元素更新一次变量的值。那么问题来了,当执行pop操作时,上一次的最小值就找不到了。解决方法方法1、 使用一个栈。元素x...

实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

思路: push: 利用两个栈,第一个栈顺序存放元素,第二个栈当为空时,先存入一个元素,再次存入时,如果要存放的元素比第二个栈顶的元素大,则不存入,小于或等于的时候存入,就能保证第二栈顶都是第一个栈中...

实现一个栈, 其 Push,Pop,Min 操作的 时间复杂度 均为 O( 1 )

1.实现一个栈, 要求 : Push, Pop, Min 操作的 时间复杂度 均为 O( 1 ). 思路: 首先, 我们先否定一种思路: 用一个变量保存每次入栈后 栈中最小值, 这种思路的问题在于, ...

011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)

实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值。  push,pop和min函数的时间复杂度都为O(1)。 看到这个题目最直接的反应是用一个变量来保存当前栈的最小值,让...

【面试题】实现一个栈要求Push,Pop,Min(返回栈中最小值的操作)的时间复杂度为O(1)

思路: 用两个栈来实现,栈sData存放入栈元素,栈sMin存放最小值。 按照元素入栈顺序,将要入栈的第一个元素,同时压入两个栈中。后续每个元素入栈时,与sMin栈中栈顶元素比较大小,若入...

算法2_实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)

实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值。  push,pop和min函数的时间复杂度都为O(1)。 看到这个题目最直接的反应是用一个变量来保存当前栈的最...

模拟实现一个Stack 要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

模拟实现Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)。 思路: Min(返回最小值的操作)我们可以实现用一个辅助栈或者辅助数组来实...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)