题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49
解题想法
思路一:使用两个栈,栈 A 保存元素,栈 B 保存此时栈 A 的最小值。
每添加一个元素时,判断添加的元素值与栈 B 顶部元素做比较,然后把最小值加在 B 的顶部。
时间复杂度 O(1),空间复杂度 O(N)
代码实现
import java.util.Stack;
public class Solution {
Stack<Integer> stack = new Stack<>();
Stack<Integer> stackMin = new Stack<>();
public void push(int node) {
stack.push(node);
// 原来是空,那么最小值就是刚加入的值
if(stackMin.isEmpty()){
stackMin.push(node);
}else{
int temMin = stackMin.peek();
// 将最小值插到顶部
if(temMin > node){
stackMin.push(node);
}else{
stackMin.push(temMin);
}
}
}
public void pop() {
stack.pop();
stackMin.pop();
}
public int top() {
return stack.peek();
}
public int min() {
return stackMin.peek();
}
}