定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,时间复杂度应为 O(1)
自定义符合题意的数据结构,当然要考虑使用的现有数据结构来构造。可以使用两个栈来实现题目的要求。
栈一用来正常存放数据,栈二则负责记录最小值。每次有新数据入栈时,先和栈二的最顶层元素比较,如果小于最顶层元素,栈一栈二同时压入新值;否则栈一压入新值,栈二压入当前其顶层元素的值。
每次出栈时,栈一栈二同时将数据出栈,栈一是正常存放数据的,自然不用多说;栈二的最顶层数据一定是最小的,每次出栈也同时弹出栈顶元素。
import java.util.Stack;
public class Solution {
private Stack<Integer> stack1 = new Stack<>();
private Stack<Integer> stack2 = new Stack<>();
public void push(int node) {
stack1.push(node);
if(stack2.empty()) {
stack2.push(node);
}
if(node <= stack2.peek()) {
stack2.push(node);
} else {
stack2.push(stack2.peek());
}
}
public void pop() {
stack1.pop();
stack2.pop();
}
public int top() {
return stack1.peek();
}
public int min() {
return stack2.peek();
}
}
相关文章
暂无评论...