[LeetCode] 155. Min Stack Java
题目:
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的最小值。
代码:
public class MinStack { /** initialize your data structure here. */ LinkedList<Integer> linkedList=new LinkedList<>(); int min=Integer.MAX_VALUE; /** initialize your data structure here. */ public MinStack() { } public void push(int x) { linkedList.add(x); if(x<min) min=x; } public void pop() { if(min<linkedList.getLast()) //min不变 linkedList.removeLast(); else{ linkedList.removeLast(); min=Integer.MAX_VALUE; for(int i=0;i<linkedList.size();i++){ if(linkedList.get(i)<min) min=linkedList.get(i); } } } public int top() { return linkedList.getLast(); } public int getMin() { return 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(); */