包含min函数的栈
2016-07-22 00:56
267 查看
来源:牛客网、《剑指offer》
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。要求push pop min 操作的复杂度为O(1)。
考虑使用两个栈,一个数据栈,等同于普通的栈,实现push pop peek 等操作;另一个辅助栈实现min函数。
这题关键在于用辅助栈储存什么值。要保证辅助栈的top是最小值,pop之后的顶部仍然是最小值。也就是说辅助栈从上到下存储的应该是最小值->次小值->次次小值……
这里容易进入一个误区就是:难道辅助栈就是对数据栈的排序?如果真是这样,push的时候因为要排序不能满足O(1);数据栈pop的时候,辅助栈要先查找数据栈pop出去的值然后再pop,也不满足O(1)。
当两个栈为空时,push进去的第一个值即为最小值;
push第二个元素时,若push的值<辅助栈顶元素(此处即第一个值),则将此值压进辅助栈;若push的值大于等于辅助栈顶元素,则将辅助栈顶元素再次push进去。
pop的时候,数据栈辅助栈均弹出顶元素。
java code:
参考资料:《剑指offer》
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。要求push pop min 操作的复杂度为O(1)。
考虑使用两个栈,一个数据栈,等同于普通的栈,实现push pop peek 等操作;另一个辅助栈实现min函数。
这题关键在于用辅助栈储存什么值。要保证辅助栈的top是最小值,pop之后的顶部仍然是最小值。也就是说辅助栈从上到下存储的应该是最小值->次小值->次次小值……
这里容易进入一个误区就是:难道辅助栈就是对数据栈的排序?如果真是这样,push的时候因为要排序不能满足O(1);数据栈pop的时候,辅助栈要先查找数据栈pop出去的值然后再pop,也不满足O(1)。
当两个栈为空时,push进去的第一个值即为最小值;
push第二个元素时,若push的值<辅助栈顶元素(此处即第一个值),则将此值压进辅助栈;若push的值大于等于辅助栈顶元素,则将辅助栈顶元素再次push进去。
pop的时候,数据栈辅助栈均弹出顶元素。
java code:
import java.util.Stack; public class TT { Stack<Integer> stack1 = new Stack<Integer>(); // 数据栈 Stack<Integer> stack2 = new Stack<Integer>(); // 辅助栈 用于返回min值 public void push(int node) { stack1.push(node); if (stack2.empty()) { stack2.push(node); } else { if (node < stack2.peek().intValue()) stack2.push(node); else stack2.push(stack2.peek()); } } public void pop() { if (!stack1.empty()) stack1.pop(); if (!stack2.empty()) stack2.pop(); } public int top() { if (!stack1.empty()) return stack1.peek().intValue(); else return 0; } public int min() { if (!stack2.empty()) return stack2.peek().intValue(); else return 0; } }
参考资料:《剑指offer》
相关文章推荐
- java插入式注解
- 给Xcode添加删除、复制当前行快捷键
- scala基础23-正则表达式
- UITableView修改索引的方法
- 码神-day9-java
- Java实现 图片水印或者文字水印
- 数据结构 有1个人和99个僵尸,僵尸吃了人就会恢复成人类,一个人可以让两个僵尸吃,但是被僵尸吃了人就会死掉。问:最后可以活下来的人有多少个? 解
- PHP Web木马扫描器
- 【C语言】写一个宏交换数字的奇数位与偶数位
- linux 权限管理命令chmod的介绍
- 【ReactNative/JS】uint8array转string convert uint8array to string
- c语言联合union 的联合变量,联合标记,联合类型定义的区别
- PHPCMS 前台模板集合
- MyBatis使用大全(3)------XML配置文件
- BestCoder 2nd Anniversary C.Wool
- PHPCMS 文件目录结构
- MySql拆分字符串(split拆分查找)
- PHP双向队列,双端队列代码
- Network 【CornerStone托管配置SVN】
- [python]性能优化的20条建议