标签:== util code 题目 最小 stack 数据 bsp 保存
题目:
定义栈的数据结构,在该类型中实现一个能够找到栈的最小数的min函数,在该栈中,调用min,push,pop的时间复杂度都是O(1)
思路:
把每次的最小元素(之前的最小元素和新压入栈的元素两者的较小值)都保存起来放到另外一个辅助栈里。
如果每次都把最小元素压入辅助栈,那么就能保存辅助栈的栈顶一直都是最小元素,当最小元素从数据栈内被弹出之后,同时弹出辅助栈的栈顶元素,此时辅助栈的新栈顶元素就是下一个最小值
代码实现:
import java.util.Stack; public class Eighteenth { private Stack<Integer> stack = new Stack<>(); private Stack<Integer> minStack = new Stack<>(); public void push(int data){ stack.push(data); if(minStack.size() == 0 || data < minStack.peek()){ minStack.push(data); }else{ minStack.push(minStack.peek()); } } public int pop() throws Exception{ if(stack.size() == 0){ throw new Exception("栈已为空"); } int data = stack.pop(); minStack.pop(); return data; } public int min() throws Exception{ if(stack.size() == 0){ throw new Exception("栈已为空"); } return minStack.peek(); } }
标签:== util code 题目 最小 stack 数据 bsp 保存
原文地址:https://www.cnblogs.com/HarSong13/p/11330712.html