剑指Offer(第二版)面试题30:包含min函数的栈
来源:互联网 发布:mac搜索文件命令 编辑:程序博客网 时间:2024/06/03 21:08
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/73477461冷血之心的博客)
剑指Offer(第二版)面试题30:包含min函数的栈
题目:包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中,调用min、push和pop方法
的时间复杂度均为O(1)
思路:
题目要求我们的各个方法均为O(1)复杂度,则我们考虑增加辅助空间来实现,即增加一个专门用来存储min值的辅助栈。
比如,data中依次入栈,5, 4, 3, 8, 10, 11, 12, 1
则min依次入栈,5, 4, 3,no,no, no, no, 1
no代表此次不如栈
每次入栈的时候,如果入栈的元素比min中的栈顶元素小或等于则入栈,否则不入栈。
java实现最小栈的代码如下:
import java.util.Stack;/* * 题目:包含min函数的栈 * 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中,调用min、push和pop方法 * 的时间复杂度均为O(1) */public class Main {Stack<Integer> stack = new Stack<>();Stack<Integer> minStack = new Stack<>();/** * 首先将值push进普通栈stack中, * 判断是否需要将值放入minStack中 * @param node */public void push(int node) { stack.push(node); if(minStack.isEmpty()||minStack.peek()>=node) minStack.push(node); } /** * 首先需要对stack执行出栈操作, * 判断minStack中是否需要出栈操作 */ public void pop() { stack.pop(); if(stack.peek()==minStack.peek()){ minStack.pop(); } } public int top() { return stack.peek(); } /** * 直接peek minStack * @return */ public int min() { return minStack.peek(); }}
需要注意的地方:
该实现算法中,在push和pop操作中,均有判断,判断值相等一定要用peek方法而不是pop!!!切记切记,关键点。
以上实现中,minStack中的个数一般少于当前stack中的个数。比较简单一点。
以下是剑指Offer中提供的思路,个人认为不是特别好。
比如,data中依次入栈,5, 4, 3, 8, 10, 11, 12, 1
则min依次入栈,5, 4, 3,3 , 3 , 3 , 3 , 1
即每次push操作时,如果目标值比minStack栈顶的值大,则将min栈顶的元素再次push进去。(多余是不是?)min函数被调用时,要执行pop操作(太多余了这样?)
牛客网AC地址:
https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49?tpId=13&tqId=11173&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~
本群给大家提供一个学习交流的平台,内设菜鸟Java管理员一枚、精通算法的金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。
- 剑指Offer(第二版)面试题30:包含min函数的栈
- 【剑指offer】面试题 30:包含 min 函数的栈
- 【剑指offer】面试题30:包含min函数的栈
- 剑指offer--面试题30:包含min函数的栈
- [剑指offer][面试题21]包含min函数的栈
- 剑指offer 面试题21:包含min函数的栈
- 【剑指offer】面试题21:包含min函数的栈
- 【剑指offer】面试题21:包含min函数的栈
- 剑指Offer:面试题21 包含min函数的栈
- 剑指offer 面试题21 包含min函数的栈
- 《剑指Offer》面试题21:包含min函数的栈
- 剑指offer面试题21-包含min函数的栈
- 剑指offer-面试题21:包含min函数的栈
- 剑指offer-面试题21.包含min函数的栈
- 剑指offer面试题 包含min函数的栈
- 剑指Offer----面试题21:包含min函数的栈
- 剑指offer-面试题21:包含min函数的栈
- 剑指offer面试题21:包含min函数的栈
- 编程IDE杂项与各种实用的小工具
- gcc使用的一些环境变量
- 典型数据库架构设计与实践 | 架构师之路
- JDK8-方法引用 ,构造引用,数组引用(四)
- 递归
- 剑指Offer(第二版)面试题30:包含min函数的栈
- mysql SQL设置外键约束ON DELETE CASCADE
- stack overflow[part2]
- 学习笔记
- C++面试题:String类的实现
- JAVA的map集合练习
- Linux下部署Redis
- JDK之SET
- 下拉导航菜单被遮住解决办法