【题目】:
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
【示例】:
输入
45237
- peek() 查看栈顶的对象而不移除它
- push() 入栈
- pop() 出栈
用一个min栈同步存储stack栈最小数,比较;保证时间复杂度。
入栈:
出栈:
【关键点】: 栈,O(1)
【Java】:
import java.util.Stack;
public class Solution {
Stack<Integer> stack = new Stack<Integer>();
Stack<Integer> min = new Stack<Integer>();
//入栈
public void push(int node) {
if(min.isEmpty()||node<min.peek()){//node比min栈数小存入(min总比stack小)
min.push(node);
}
stack.push(node);//没有限制,全部存入
}
//出栈
public void pop() {
if(min.peek().equals(stack.peek())){//当stack较小值弹出时,min也弹出;清空
min.pop();
}
stack.pop();//弹出
}
public int top() {
return stack.peek();//peek()查看栈顶的对象而不移除它
}
public int min() {
return min.peek();//peek()查看最小min栈顶的对象而不移除它
}
}