找出栈中最小元素 の 双栈实现
来源:互联网 发布:java multieditor 编辑:程序博客网 时间:2024/06/17 22:49
虽然在面试宝典中,声称这是一个用O(1)时间复杂度实现求栈中最小元素的解法。
但是,不管怎么说还是遍历了栈,我不承认。
/** * */package dianer;import java.util.Stack;/** * * @author LilyLee * @date 2017年3月19日 * @Version *题目:来自《面试宝典》 *如何使用O(1)的时间复杂度求栈中最小元素 * *【然而我觉得这个有点儿伪命题的感觉】 *【无论如何还是要过一遍全部元素,有区别吗?】 *//* * 因为栈的push和pop操作都是针对栈顶元素的, * 所以一般如果想要获得最小元素,需要遍历栈中所有元素找出最小值,这样的话时间复杂度是O(n)。 * * 所以想要减小时间复杂度,需要 “空间换时间”、 * * 具体而言: * 定义一个主栈和一个辅栈, * 主栈执行的是push压栈的操作, 用一个min来记录当前的最小值, * 用一个辅栈来保存最小元素,保证辅栈的栈顶元素始终为最小值。 * * * */public class min_Stack {private Stack<Integer> stack=new Stack<Integer>();private Stack<Integer> minStack=new Stack<Integer>();public static void main(String[] args) throws Exception {min_Stack minstack=new min_Stack();minstack.push(3);minstack.push(4);minstack.push(9);System.out.println("min="+minstack.min());}public void push(int data){stack.push(data);if(minStack.size()==0 || minStack.peek()>data)minStack.add(data);else{int date=minStack.peek();minStack.add(date);}}public int pop() throws Exception{if(stack.size()==0){return Integer.MAX_VALUE;}int data=stack.pop();int mindata=minStack.pop();return data;}public Object min() throws Exception{if(minStack.size()==0){return null;}return minStack.peek();}}
0 0
- 找出栈中最小元素 の 双栈实现
- 找出栈中最小的元素
- 栈中最小元素
- 找出数组中最小的元素
- 找出旋转数组中最小的元素
- 自定义栈数据结构,并且实现取出栈中最小元素
- 求出栈中最小元素
- 找出数组中最小的k个元素
- 找出有序数组中绝对值最小的元素
- 找出数组中最小的k个元素
- 找出一个数组中最小的K个元素
- 用递归找出数组中最小的元素
- 找出有序数组中绝对值最小的元素
- 快速寻找栈中最小元素
- O(1)时间复杂度实现入栈、出栈、获得栈中最小元素、获得栈中最大元素
- 实现堆栈中最小的元素getMin()
- 找到栈最小元素
- 实现一个特殊的栈,在实现栈的基本功能基础上,在实现返回栈中最小元素的操作
- c 函数的初使用
- android源码解析(5)--AsyncTask源码分析以及使用中的坑
- ACM程序设计书上题目小总结
- 【程序2】奖金根据利润提成
- MQTT 移植STM32+GPRS(串口透传)(四)
- 找出栈中最小元素 の 双栈实现
- 《ACM程序设计》-Problem-M-二倍问题
- 自学Android之UI组件:(四)Fragment的基本使用(下)
- form-group 两种常用使用
- java的项目如何部署到tomcat上
- JAVA数据结构
- 综合实例
- Linq使用方法
- 使用CallableStatement执行存储过程