微软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());
    }
}

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

【Java】设计一个栈,并且push,pop和min三个方法的时间复杂度必须为O(1)

设计一个栈,除pop与push方法,还支持min方法,可返回栈元素中的最小值。 push,pop和min三个方法的时间复杂度必须为O(1) 要保证min的时间复杂度为O(1), 那就不能每次通过遍...
  • michellechouu
  • michellechouu
  • 2015年07月10日 13:29
  • 1287

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

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

实现一个栈,要求push,pop,Min的操作时间复杂度为O(1)

问题:实现一个栈,要求实现Push(入栈),Pop(出栈),Min(返回最小值)的操作时间复杂度为O(1). 分析:刚看到这个题的时候,用栈来实现Min(返回最小值)的操作,我的第一反应就是必须把栈中...
  • qq_29503203
  • qq_29503203
  • 2016年09月11日 22:33
  • 758

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

/** * File:Test_40.java * Title: * Description: 40.百度研发笔试题(栈、算法) 引用自:zp155334877 1)设计一个栈结构,满足一下...
  • hxpjava1
  • hxpjava1
  • 2015年07月09日 13:52
  • 993

15个nosql数据库

1、MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案。当数据量达到50GB以上...
  • fishmai
  • fishmai
  • 2016年06月17日 12:41
  • 11204

每天学习一算法系列(3)(设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))

题目: 请设计包含min函数的栈。 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 题目来源于:http://t...
  • yuucyf
  • yuucyf
  • 2011年04月21日 16:07
  • 3420

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

~实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)~...
  • manongdeyipiant
  • manongdeyipiant
  • 2017年04月15日 22:51
  • 322

微软100题-天天做-第7题

第7题(链表) 微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。 为了简化问题,我们假设俩个链表均不带环。 问题扩展: 1.如果链表...
  • hxpjava1
  • hxpjava1
  • 2014年03月26日 20:49
  • 506

微软100题-天天做-第18题

第18题(数组): 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除...
  • hxpjava1
  • hxpjava1
  • 2014年03月28日 23:13
  • 425

面试题:支持O(1)时间内完成pop,push和max的栈

一般的栈,本身的pop和push的操作就是O(1)的,可以考虑使用一个变量来存储最大值。问题在于,如果这个最大值被pop出去,这个变量就需要重新计算。如果通过遍历一遍来求出,则需要O(n)的时间,达不...
  • AlburtHoffman
  • AlburtHoffman
  • 2014年01月26日 22:51
  • 9022
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微软100题40题-设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)。
举报原因:
原因补充:

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