Java - 剑指offer_面试题21_包含min函数的栈
2017-05-04 09:46
351 查看
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小最小元素的min函数。在该栈中,调用min、push 及 pop的时间复杂度都是O(1)。
本题关键问题在于:O(1)时间复杂度的 min 函数。
即无论占中元素如何变化。都要在 O(1)内知道最小值。
因此,需要设置两个栈:
1、数据栈,用于数据的压入和弹出
2、辅助栈,存入与数据栈中相对应的最小元素
即 数据栈每压入一个元素,辅助栈压入当时数据栈内所有元素的最小值;弹出数据栈元素时,也相应的弹出辅助栈内的min元素,保持辅助栈的栈顶元素永远是 数据栈元素的最小值。
在解决问题时,可以 举例 帮助自己思考。
[java] view
plain copy
import java.util.Stack;
public class Solution {
Stack<Integer> stack = new Stack<>();
Stack<Integer> minStack = new Stack<>();
public void push(int node) {
stack.push(node);
if (minStack.isEmpty()) {
minStack.push(node);
} else {
minStack.push(Math.min(node, minStack.peek()));
}
}
public void pop() {
if (!stack.isEmpty()) {
stack.pop();
minStack.pop();
}
}
public int top() {
return stack.peek();
}
public int min() {
if (minStack.isEmpty())
return Integer.MIN_VALUE;
return minStack.peek();
}
}
通过这道题学习了:
1、举实例一步步分析,对问题的分析,有很大帮助
2、认识到了几个薄弱点:模板类的使用,虚析构函数的理解,常成员函数的理解 以及 系统库的有效利用(并不需要自己 从头定义栈)。
本题关键问题在于:O(1)时间复杂度的 min 函数。
即无论占中元素如何变化。都要在 O(1)内知道最小值。
因此,需要设置两个栈:
1、数据栈,用于数据的压入和弹出
2、辅助栈,存入与数据栈中相对应的最小元素
即 数据栈每压入一个元素,辅助栈压入当时数据栈内所有元素的最小值;弹出数据栈元素时,也相应的弹出辅助栈内的min元素,保持辅助栈的栈顶元素永远是 数据栈元素的最小值。
在解决问题时,可以 举例 帮助自己思考。
[java] view
plain copy
import java.util.Stack;
public class Solution {
Stack<Integer> stack = new Stack<>();
Stack<Integer> minStack = new Stack<>();
public void push(int node) {
stack.push(node);
if (minStack.isEmpty()) {
minStack.push(node);
} else {
minStack.push(Math.min(node, minStack.peek()));
}
}
public void pop() {
if (!stack.isEmpty()) {
stack.pop();
minStack.pop();
}
}
public int top() {
return stack.peek();
}
public int min() {
if (minStack.isEmpty())
return Integer.MIN_VALUE;
return minStack.peek();
}
}
通过这道题学习了:
1、举实例一步步分析,对问题的分析,有很大帮助
2、认识到了几个薄弱点:模板类的使用,虚析构函数的理解,常成员函数的理解 以及 系统库的有效利用(并不需要自己 从头定义栈)。
相关文章推荐
- 剑指Offer:面试题21——包含min函数的栈(java实现)
- 剑指offer--面试题21:包含min函数的栈--Java实现
- 剑指offer——面试题21:包含min函数的栈(泛型编程,一个巧妙的思维)
- 【剑指offer】4.3举例让抽象问题具体化——面试题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】面试题21:包含min函数的栈
- 剑指offer之面试题21:包含min函数的栈
- 【剑指offer】面试题21:包含min函数的栈
- 剑指Offer之面试题21:包含min函数的栈
- 剑指offer--面试题21:包含min函数的栈
- [剑指offer][面试题21]包含min函数的栈
- 剑指offer 面试题21 包含min函数的栈