题目描述
设计一个支持 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); }
原文地址:https://www.cnblogs.com/lisen10/p/11188561.html
时间: 2024-10-01 21:56:05