【剑指offer】面试题30:包含min函数的栈
2017-07-26 21:59
447 查看
完整代码地址
完整代码地址题目
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。思路
用一个值来保存最小值是行不通的,因为栈pop操作后,最小值就变了。但是可以使用另外一个栈minStack来保存最小值。
每次push操作时,将当前最小值与新元素对比得出新的最小值,同时push进minStack。
每次pop操作时,两个栈同时pop。
代码
public class _30_MinInStack { private Stack<Integer> stack = new Stack<>(); private Stack<Integer> minStack = new Stack<>(); public void push(int node) { stack.push(node); if(minStack.isEmpty()) { minStack.push(node); } else if(minStack.peek() > node) { minStack.push(node); } else { minStack.push(minStack.peek()); } } public void pop() { stack.pop(); minStack.pop(); } public int top() { return stack.peek(); } public int min() { return minStack.peek(); } }
测试
public class _30_Test { public static void main(String[] args) { test1(); } /** * 1.新压入栈的数字比之前的最小值大 * 2.新压入栈的数字比之前的最小值小 * 3.弹出栈的数字不是最小元素 * 4.弹出栈的数字是最小元素 */ private static void test1() { _30_MinInStack mis = new _30_MinInStack(); mis.push(4); mis.push(5); mis.push(6); MyTest.equal(mis.top(), 6); MyTest.equal(mis.min(), 4); mis.pop(); mis.pop(); MyTest.equal(mis.top(), 4); MyTest.equal(mis.min(), 4); mis.push(2); MyTest.equal(mis.top(), 2); MyTest.equal(mis.min(), 2); mis.pop(); MyTest.equal(mis.top(), 4); MyTest.equal(mis.min(), 4); } }
相关文章推荐
- 剑指offer--面试题30:包含min函数的栈
- 剑指offer-第四章解决面试题的思路(包含min函数的栈)
- 【剑指offer】面试题21:包含min函数的栈
- 剑指offer代码解析——面试题21包含min函数的栈
- 剑指Offer(30)包含min函数的栈
- 剑指offer面试题21:包含min函数的栈
- 剑指offer_面试题21_包含min函数的栈
- 剑指offer之面试题21包含min函数的栈
- 剑指offer——面试题21:包含min函数的栈(泛型编程,一个巧妙的思维)
- 剑指offer 面试题21 包含min函数的栈
- 剑指offer-面试题21.包含min函数的栈
- 剑指Offer面试题20顺时针打印矩阵,面试题21包含min函数的栈
- 剑指offer 面试题21:包含min函数的栈
- 剑指offer-面试题21-包含min函数的栈
- 剑指offer-面试题21.包含min函数的栈
- 【剑指offer】4.3举例让抽象问题具体化——面试题21:包含min函数的栈
- 剑指offer--面试题21:包含min函数的栈
- Java - 剑指offer_面试题21_包含min函数的栈
- 【剑指Offer】面试题21:包含min函数的栈
- 剑指offer之面试题21:包含min函数的栈