题目:
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路:
- 首先时间复杂度要求为O(1),所以我们肯定要提前判断,实时保存当前栈中最小的元素,这样才能直接获取
- 这里我们使用另一个栈来保存每个元素进栈后当前最小元素,并且为了兼容出栈后元素的变更,最小元素也要随pop更替。
代码:
import java.util.Stack;
public class Solution {
private static Stack<Integer> normalStack = new Stack<>();
private static Stack<Integer> minStack = new Stack<>();
public void push(int node) {
normalStack.push(node);
if(minStack.isEmpty()) minStack.push(node);
else if(node<minStack.peek()) minStack.push(node);
else minStack.push(minStack.peek());
}
public void pop() {
normalStack.pop();
minStack.pop();
}
public int top() {
return normalStack.peek();
}
public int min() {
return minStack.peek();
}
}