用时间复杂度O(1)的算法求栈中的最小元素
来源:互联网 发布:淘宝店友情链接怎么弄 编辑:程序博客网 时间:2024/06/03 04:02
总体思想是以空间来换时间,设置两个栈,其中一个栈放元素,一个栈放最小的值,在push时,判断新push进去的元素和原先栈中的元素哪个小,小的才有资格入栈;在pop元素时候,要记得将存放最小值的栈的栈顶元素也pop出来。很简单。栈的实现用链表的实现方式。
/* * 用O(1)的时间复杂度求栈中的最小元素 */public class MyStack1 { LinkedStack<Integer>elem; LinkedStack<Integer>min; public MyStack1(){ elem=new LinkedStack<Integer>(); min=new LinkedStack<Integer>(); } public void push(int data){ elem.push(data); if(min.isEmpty()){ min.push(data); }else{ if(data<min.peek()){ min.push(data); } } } public int pop(){ int topdata=elem.peek(); elem.pop(); if(topdata==min.peek()){ min.pop(); } return topdata; } public int min(){ if(min.isEmpty()){ return Integer.MAX_VALUE; } return min.peek(); }public static void main(String[] args){ MyStack1 newstack=new MyStack1(); newstack.push(1); newstack.push(2); newstack.push(3); newstack.pop(); System.out.print(newstack.min());//print 1}}
0 0
- 用时间复杂度O(1)的算法求栈中的最小元素
- O(1)时间复杂度求栈的最小元素
- O(1)时间复杂度求栈的最小元素
- 如何在O(1)的时间复杂度求栈中的最小数据元素:
- 在O(1)时间复杂度中,求栈中的最小元素
- 【经典算法】:求一个字符串的主元素(o(n)复杂度)
- 如何用O(1)的时间复杂度求栈中最小元素
- 如何用O(1)的时间复杂度求栈中最小元素
- 带有取最小元素的栈,要求压栈、出栈、取最小元素时间复杂度O(1)
- 【C++】返回栈中最小的元素,要求时间复杂度为O(1)
- 分治法:用时间复杂度为lgn的算法求x的n 次方
- 数组中未出现的最小正整数(时间复杂度O(N),空间复杂度O(1))
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。时间复杂度都是O(1)
- Min栈——用O(1)时间复杂度返回当前栈中最小元素
- 有1,2...一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),时间复杂度为O(1)
- 使用栈在O(1)的时间复杂度求最大值
- O(1)时间复杂度实现入栈、出栈、获得栈中最小元素、获得栈中最大元素
- 求栈的最小元素
- 南华上期CTP接口开发之Ubuntu服务器下配置(GNU/Linux)(无GUI)
- 特征冗余
- 编辑器之[System.Serializable]数组List对象添加默认值
- 后缀数组复习小记
- sdasdsad
- 用时间复杂度O(1)的算法求栈中的最小元素
- 使用数码管实现步进
- Next Greater Element I
- DNS和BIND
- A 奇怪的排序
- [JZOJ5050] 颜色树
- centos安装redis问题
- 面向对象的编程原则
- Java 操作Cookie