Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. push(x) -- Push element x onto stack. pop() -- Removes the element on top of the stack. top() -- Get the top element. getMin() -- Retrieve the minimum element in the stack. Example: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.
实现一个stack,要求有push,pop,top功能,还要有一个返回stack最小值的函数(要在常量时间里返回这个值)。在这里我用一个LinkList来实现stack,具体看下面代码。对于最小值,在每次添加或者删除的时候记录即可,这样就能在常量时间获得stack的最小值。
class MinStack { private LinkedList<Integer> list; private int min; /** initialize your data structure here. */ public MinStack() { this.list = new LinkedList<Integer>(); this.min = Integer.MAX_VALUE; } public void push(int x) { this.list.addFirst(x); if(x < this.min){ this.min = x; } } public void pop() { int top = this.list.pollFirst(); if(top == this.min){ this.min = Integer.MAX_VALUE; for(int i : this.list){ if(i < this.min){ this.min = i; } } } } public int top() { return this.list.peekFirst(); } public int getMin() { return this.min; } } /** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */