文档章节

IT公司100题-2-设计带min函数的stack

关西大汉弹琵琶
 关西大汉弹琵琶
发布于 2015/10/20 17:35
字数 280
阅读 66
收藏 6

问题描述:

定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。

要求函数min、push 以及pop 的时间复杂度都是O(1)。

 

双倍空间实现:

保存2个栈,分别是元素和当前最小值。

 

压缩空间实现:

代码实现:

package oschina.IT100;
/**
 * @project: oschina
 * @filename: IT2.java
 * @version: 0.10
 * @author: JM Han
 * @date: 17:08 2015/10/20
 * @comment: design a stack that has min function which could return the min element at anytime
 * @result:
 */

import java.util.Stack;

class MinStack{
   Stack<Integer> stacks, mins;
   MinStack(){
      stacks = new Stack<Integer>();
      mins   = new Stack<Integer>();
   }
   void push(Integer x){
      stacks.push(x);
      //use <= instead of < for duplicate element
      if(mins.isEmpty() || x <= mins.peek())
         mins.push(x);
   }
   void pop(){
      Integer x = stacks.pop();
      if(x == mins.peek())
         mins.pop();
   }
   Integer peek(){
      return stacks.peek();
   }
   Integer getMin(){
      return mins.peek();
   }
}

public class IT2 {
   public static void main(String[] args) {
      MinStack minStack = new MinStack();
      minStack.push(6);
      minStack.push(2);
      minStack.push(3);
      minStack.push(1);
      minStack.push(1);
      minStack.push(5);
      minStack.push(8);
      System.out.println("Content of stack: \n" + minStack.stacks);
      System.out.println("min value of stack: \n" + minStack.getMin());
      System.out.println("Content of mins: \n" + minStack.mins);
      minStack.pop();
      minStack.pop();
      minStack.pop();
      System.out.println("Content of mins: \n" + minStack.mins);
      System.out.println("min value of stack: \n" + minStack.getMin());
   }
}

 输出:

Content of stack: 
[6, 2, 3, 1, 1, 5, 8]
min value of stack: 
1
Content of mins: 
[6, 2, 1, 1]
Content of mins: 
[6, 2, 1]
min value of stack: 
1


© 著作权归作者所有

共有 人打赏支持
关西大汉弹琵琶
粉丝 7
博文 41
码字总数 14221
作品 0
浦东
程序员
加载中

评论(2)

关西大汉弹琵琶
关西大汉弹琵琶

引用来自“為妳變┳乖”的评论

真够无聊的,已经使用了java自带的栈了,该问题和算法还有何意义?
美女你是几个意思? 烦请明示啊
魔仙剑痴
真够无聊的,已经使用了java自带的栈了,该问题和算法还有何意义?
重磅分享:微软等数据结构+算法面试100题全部答案完整亮相

引言 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试全部100题答案的完整版,以作为对读者的回馈。 一 年之前的1...

云栖希望。
2017/12/10
0
0
微软等公司数据结构+算法面试100题

1.把二元查找树转变成排序的双向链表(树) 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14 / / / / 4 ...

chambai
2012/08/05
0
0
GitHub上11月份最热门的Java项目

又到了公布 GitHub 上热门项目的时候啦~在 11 月的排行中,猿妹加入非软件类的项目,这样可以帮助大家更直观的了解哪些项目才是GitHub 上最热门的。现在,一起来看看这些项目你使用过哪些呢?...

架构之路
2017/12/05
0
0
百度3道算法题求解

第一题: 某个公司举行一场羽毛球赛,有1001个人参加,现在为了评比出“最厉害的那个人”,进行淘汰赛,请问至少需要进行多少次比赛。 第二题 有100个灯泡,第一轮把所有灯泡都开启,第二轮把...

u011729265
2015/05/31
0
0
[算法总结] 3 道题搞定 BAT 面试——堆栈和队列

本文首发于我的个人博客:尾尾部落 0. 基础概念 栈:后进先出(LIFO) 队列:先进先出(FIFO) 栈的 java 实现 2. 队列的 java 实现 1. 用两个栈实现队列 剑指offer:用两个栈实现队列 Leet...

繁著
09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
1
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
7
3
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
3
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
2
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部