博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java】 剑指offer(30) 包含min函数的栈
阅读量:4673 次
发布时间:2019-06-09

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

本文参考自《剑指offer》一书,代码采用Java语言。

更多:  

题目 

  定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。

思路

  最初想法是定义一个成员变量min来存放最小元素,但是当最小元素弹出后,min就需要相应改变,所以必须把每次的最小值都存储下来。考虑采用一个辅助栈来存放最小值:

    栈  3,4,2,5,1

     辅助栈 3, 3,2,2,1
  (压入时,把每次的最小元素(之前最小元素与新入栈元素的较小值)保存起来放到辅助栈中)

测试算例 

  1.新压入数字更大

  2.新压入数字最小

  3.弹出数字最小

  4.弹出数字不是最小

Java代码

//题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min//函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。public class StackWithMin {		Stack
stack_data=new Stack
(); Stack
stack_min=new Stack
(); public void push(int node) { stack_data.push(node); if(stack_min.empty() || stack_min.peek()>node) { stack_min.push(node); }else { stack_min.push(stack_min.peek()); } } public void pop() { if(!stack_data.empty()) { stack_data.pop(); stack_min.pop(); } } public int min() { return stack_min.peek(); }}

  

收获

  要学会这种情况下辅助栈的用法。

  

更多:  

  

转载于:https://www.cnblogs.com/yongh/p/9804934.html

你可能感兴趣的文章
186. [USACO Oct08] 牧场旅行
查看>>
一个屌丝程序猿的人生(三十九)
查看>>
Linux常用命令
查看>>
Spring之@Configuration配置解析
查看>>
Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)...
查看>>
pip安装第三方库以及版本
查看>>
一、app更新提示后台接口开发-(2)数据库表设计
查看>>
利用data-src属性 更换图片
查看>>
Spring(3)
查看>>
SSM整合 mybatis多条件查询与分页
查看>>
VS2010中dumpbin工具的使用
查看>>
使用Golang搭建web服务
查看>>
HTML5触摸事件(touchstart、touchmove和touchend)
查看>>
架构师软技能之协商(上)
查看>>
商品翻牌效果(纯css)
查看>>
win10 UWP 序列化
查看>>
读书心得
查看>>
前端知识整理 CSS盒模型
查看>>
sendmail 常见报错总结
查看>>
asp.net Response.AddHeader的方法来下载
查看>>