题目:包含min函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
解题思路:
用两个实现包含min函数的栈sk2(min) sk1正常。如果sk2为空,直接压入;不为空进行比较,如果此时的节点比sk2最上层的节点数值大的话,就压入sk2的最上层节点,小的话,就压入此时的节点。
ps:如果每次都把最小元素压入辅助栈中(sk2),那么就保证辅助栈的站定一直都是最小元素,当最小元素从数据栈内被弹出之后,同时弹出 辅助栈的栈顶元素,此时辅助栈的新栈顶元素就是下一个最小值。
实现代码:
import java.util.Stack;
import java.util.*;
public class Solution {
Stack<Integer> sk1=new Stack<>();
Stack<Integer> sk2=new Stack<>();
public void push(int node) {
sk1.push(node);
//如果此时辅助栈为空,直接压入新的元素
if(sk2.isEmpty()) {
sk2.push(node);
}else {
//辅助栈不为空,将栈顶元素和新的元素进行对比
//新的元素比辅助栈的栈顶元素小,将新的元素压入辅助栈
if(node<sk2.peek()) {
sk2.add(node);
}else {
//新的元素比辅助栈的栈顶元素大,将栈顶元素压入辅助栈
sk2.push(sk2.peek());
}
}
}
public void pop() {
sk1.pop();
sk2.pop();
}
public int top() {
return sk1.peek();
}
//辅助栈的栈顶元素是最小值
public int min() {
return sk2.peek();
}
}