剑指:包含min函数的栈(min栈)
Posted lisen10
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指:包含min函数的栈(min栈)相关的知识,希望对你有一定的参考价值。
题目描述
设计一个支持 push,pop,top 等操作并且可以在 O(1) 时间内检索出最小元素的堆栈。
- push(x)–将元素x插入栈中
- pop()–移除栈顶元素
- top()–得到栈顶元素
- getMin()–得到栈中最小元素
样例
MinStack minStack = new MinStack(); minStack.push(-1); minStack.push(3); minStack.push(-4); minStack.getMin(); --> Returns -4. minStack.pop(); minStack.top(); --> Returns 3. minStack.getMin(); --> Returns -1.
解法
定义两个stack,一个为存放最小数的序列的辅助栈
。
压栈时,先将元素 x
压入 stack1
。然后判断 stack2
的情况:
stack2
栈为空或者栈顶元素大于x
,则将x
压入stack2
中。stack2
栈不为空且栈定元素小于x
,则重复压入栈顶元素。
获取最小元素时,从 stack2
中获取栈顶元素即可。
import java.util.Stack; public class MinStack private Stack<Integer> stack1; private Stack<Integer> stack2; public MinStack() stack1 = new Stack<>(); stack2 = new Stack<>(); public void push(int x) stack1.push(x); if(stack2.isEmpty() || stack2.peek()>x) stack2.push(x); else stack2.push(stack2.peek()); public void pop() stack1.pop(); stack2.pop(); public int top() return stack1.peek(); public int getMin() return stack2.peek();
public static void main(String[] args) MinStack obj = new MinStack(); obj.push(-1); obj.push(3); obj.push(-4); obj.push(0); obj.pop(); int param_3 = obj.top(); int param_4 = obj.getMin(); System.out.println(param_3+ " "+param_4);
以上是关于剑指:包含min函数的栈(min栈)的主要内容,如果未能解决你的问题,请参考以下文章