剑指offer(22):包含min函数的栈
来源:互联网 发布:财务会计软件目的 编辑:程序博客网 时间:2024/04/30 10:06
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。要求在该栈中,调用min、push、pop的时间复杂度都是O(1)。
分析
最直接的思路:每次有一个元素进栈都进行一次排序,使最小的元素始终位于栈顶,可以在
推荐解法:使用一个辅助栈mins存放每一次入栈操作的最小元素,min()函数直接从辅助栈mins的栈顶进行弹出操作,在
牛客AC代码:
/** * 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 * 要求在该栈中,调用min push pop的时间复杂度都是O(1) */import java.util.Stack;public class MinStack { Stack<Integer> data = new Stack<Integer>(); // 数据栈 Stack<Integer> mins = new Stack<Integer>(); // 辅助栈,存放最小值 Integer tmpMin = null; // 数据进栈,最小值进栈 public void push(int node) { if(tmpMin == null) { tmpMin = node; data.push(node); mins.push(node); } else { if(node <= tmpMin) { tmpMin = node; mins.push(node); } data.push(node); } } // 弹出栈顶元素 public void pop() { int num1 = data.pop(); int num2 = mins.pop(); if(num1 != num2) mins.push(num2); } // 查看栈顶元素 public int top() { int num = data.pop(); data.push(num); return num; } // 查看当前最小元素 public int min() { int num = mins.pop(); mins.push(num); return num; }}
参考
1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社
0 0
- 剑指offer(22):包含min函数的栈
- 【剑指offer】包含min函数的栈
- 剑指offer--包含min函数的栈
- 剑指Offer-->包含min函数的栈
- 《剑指offer》包含min函数的栈
- 剑指offer - 包含min函数的栈
- 剑指offer-包含min函数的栈
- 剑指offer:包含min函数的栈
- 包含min函数的栈|剑指offer
- 剑指offer-包含min函数的栈
- 剑指offer 包含min函数的栈
- 剑指offer:包含min函数的栈
- 剑指offer 包含min函数的栈
- [剑指offer]包含min函数的栈
- 《剑指offer》-包含min函数的栈
- 剑指offer----包含min函数的栈
- 【剑指offer】包含min函数的栈
- 剑指offer|包含min函数的栈
- Android中Activity调用Fragment事件,通过回调实现。
- sdut 2604 Thrall’s Dream 判断一个图是否单侧连通
- MT4行情datafeed接口二次开发简介
- Redis配置集群遇到问题及解决方法
- J2EE异常 [转]
- 剑指offer(22):包含min函数的栈
- 手动安装rubygems
- Fragment嵌套注意问题
- R语言自定义函数,利用QQ图和shaprio.test检验正态分布
- 系统可靠性(摘抄)
- linux中使用find和xargs
- Android 4.4 Kitkat Phone工作流程浅析(四)__RILJ工作流程简析
- 设计模式之六大原则——里氏替换原则(LSP)
- RHLE6/CENTOS6解析域名慢处理及关闭ipv6