标签:
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
所以就需要节省空间,不是每次push的时候都push最小值,而是每次最小值发生改变的时候才push。代码如下:
class MinStack { LinkedList<Integer> stack = new LinkedList<Integer>(); LinkedList<Integer> minStack = new LinkedList<Integer>(); public void push(int x) { if (x <= getMin()) { minStack.push(x); } stack.push(x); } public void pop() { if (stack.pop() == getMin()) { minStack.pop(); } } public int top() { return stack.peek(); } public int getMin() { if (minStack.isEmpty()) { return Integer.MAX_VALUE; } else { return minStack.peek(); } } }
class MinStack { private long min = 0; private LinkedList<Long> stack = new LinkedList<>(); public void push(int x) { if (stack.isEmpty()) { min = x; stack.push(0L); } else { stack.push(x-min); if (x-min < 0) { min = x; } } } public void pop() { if (stack.peek() < 0) { min -= stack.peek(); } stack.pop(); } public int top() { if (stack.peek() < 0) { return (int) min; } return (int) (min+stack.peek()); } public int getMin() { return (int) min; } }
每次并不是push原数据,而是与min坐过差值之后在存放,good idea!!!
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/my_jobs/article/details/47612395