题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
题目链接:
分析:
利用栈的先进后出特性,先进去的元素会后出来,用一个辅助栈来存储当前最小的值。
实现:
每当压入主栈时,判断压入的元素是否不大于辅助栈顶值,是则压入,否则不作处理。
import java.util.Stack; public class Solution { private Stack<Integer> s1=new Stack<>(); private Stack<Integer> s2=new Stack<>(); //关键实现:利用栈的先进后出特性,先进去的元素会后出,所以较小值可以用一个辅助栈存储 //当新来值不大于之前先进去的最小值时,就将该数值压入辅助栈。注意相等情况也需要压入栈。 public void push(int node) { s1.push(node); if(s2.empty()||node<=s2.peek()){ s2.push(node); } } //出栈时,同时判断辅助栈s2是否需要出栈 public void pop() { int a =s1.peek(); if(a == s2.peek()){ s2.pop(); } s1.pop(); } public int top() { return s1.peek(); } public int min() { return s2.peek(); } }