定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 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(); } }