博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
"Coding Interview Guide" -- 设计一个有getMin功能的栈
阅读量:4313 次
发布时间:2019-06-06

本文共 1887 字,大约阅读时间需要 6 分钟。

题目

  实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作

 

要求

  1. pop、push、getMin操作的时间复杂度都是O(1)

  2. 设计的栈类型可以使用现成的栈结构

 

分析

  栈是一种只能在另一端进行操作的具有“先进后出”特性的数据结构,它有push(元素入栈)、pop(元素出栈)、peek(访问栈顶元素)、size(获取栈元素个数)和isEmpty(判断栈是否为空)等基本功能

  一般来说,栈并没有提供返回当前栈中最小元素的方法。因为栈只允许在栈顶对元素进行操作,所以如果只使用一个栈来存储元素,那么我们是无法知道当前栈中的最小元素的,严格地说,对于一个非空栈,我们永远都只知道当前的栈顶元素是什么。所以只用一个栈结构难以实现getMin功能。可以考虑增加一个辅助栈结构,用来记录栈的所有可能最小元素序列。

  

1 import java.util.Stack; 2  3 public class MyStack 4 { 5     private Stack
dataStack; 6 private Stack
minStack; 7 8 public MyStack() 9 {10   dataStack = new Stack<>();11   minStack = new Stack<>();12 }13 14 public void push(int data)15 {16   dataStack.push(data);17   if(minStack.empty()) // 辅助栈为空或者栈顶元素小于或等于data时将data入栈,说明将data压入dataStack中后,当前dataStack的最小元素就是data,所以要更新minStack18   {19     minStack.push(data);20   }21   else if(data <= minStack.peek())22     {23 minStack.push(data);24   }25 }26 27 public int pop()28 {29   if(dataStack.empty())30   {31 throw new RuntimeException("fail to pop, stack is empty.");32   }33   else34   {35 int data = dataStack.pop();36 if(data == getMin()) // 如果dataStack栈弹出的元素是当前dataStack中的最小元素,则弹出操作之后,需要对minStack栈进行更新37 {38 minStack.pop();39 }40   return data;41   }42 }43 44 public int getMin()45 {46 if(minStack.empty())47 {48 throw new RuntimeException("fail to getMin, stack is empty.");49     }50   return minStack.peek();51 }52 53 public int size()54 {55   return dataStack.size();56 }57 58 public boolean isEmpty()59 {60 return dataStack.empty();61 }62 }

 

来源:左程云老师《程序源代码面试指南》

  

转载于:https://www.cnblogs.com/latup/p/10880699.html

你可能感兴趣的文章
静态方法与非静态方法
查看>>
注释,字符串
查看>>
性能瓶颈
查看>>
cmd 导入数据库
查看>>
Makefile书写注意事项--个人择记(一)
查看>>
文件转码重写到其他文件
查看>>
场景3 Data Management
查看>>
树结构练习——排序二叉树的中序遍历
查看>>
AC自动机模板
查看>>
python 基本语法
查看>>
Swift - 点击箭头旋转
查看>>
git配置
查看>>
【hexo】01安装
查看>>
CI框架源码学习笔记2——Common.php
查看>>
005---书籍添加和编辑的提交数据
查看>>
使用case语句给字体改变颜色
查看>>
JAVA基础-多线程
查看>>
面试题5:字符串替换空格
查看>>
JSP九大内置对象及四个作用域
查看>>
ConnectionString 属性尚未初始化
查看>>