包含min函数的栈
来源:互联网 发布:淘宝售后期限是多久 编辑:程序博客网 时间:2024/04/28 02:43
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都为O(1)
思路:
首先想到的是,在将元素压入栈的时候,将所有元素进行排序,比如压入元素的顺序为 {21,3,5,7,1},第一个压入21,第二个压入3的时候需要将21先取出,然后再压入3,再压入21,以此类推,但是这样并不符合时间复杂度为O(1)。
于是想到,使用一个成员变量,保存最小值。例如{21,3,5,7,1},当压入21的时候,最小值为21,压入3的时候,由于3比21小,则将最小值保存为3,以此类推。但如果需要得到次小值呢,是否再定义一个成员变量呢?
如果再想得到再比次小还小的一个元素呢?再定义一个成员变量保存么?
答案显然不是,这时候可以考虑用一个辅助栈来保存。
代码:
public class MinStack21 { Stack<Integer> m_data ; Stack<Integer> m_min;public MinStack21() { m_data =new Stack<>(); m_min = new Stack<>();} // 提取栈的第一个元素 public void pop() { if (m_data.size() > 0 && m_min.size() > 0) { m_min.pop(); m_data.pop(); } } // 将元素压入栈 public void push(int value) { m_data.push(value); //不管有没有元素,value都进入栈 if (m_min.size() > 0) { //System.out.println(m_min.size()); int min = m_min.peek(); // 如果最小栈的元素小于新元素,则在辅助栈中依然压入最小栈的栈顶元素 if (min < value) m_min.push(min); // 如果最小栈的栈顶元素大于value,则将value压入最小栈的栈顶 else m_min.push(value); } else { m_min.push(value); } } // 返回所有元素的最小值 public int min() { int ans = Integer.MAX_VALUE; if (m_min.size() > 0 && m_data.size()>0) ans = m_min.pop(); return ans; }}
0 0
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min 函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- hashit
- 指针的类型
- jquery源码分析插件
- [Learning Notes] Android 显示WEB的信息
- [CUDA学习]CUDA安装
- 包含min函数的栈
- 第七周项目1 -建立顺序环形队列算法库
- 打了激素的数组
- HDU_2899_Strange fuction
- NSFileManager文件的创建复制删除遍历 NSFileHandler读取关闭同步 NSUserDefault(类似android shreapreference) plist属性列表
- hashmap冲突的解决方法以及原理分析
- 输入输出流简单理解
- Moving git repository and all its branches, tags to a new remote repository keeping commits history
- CVPR 2016-9-30