LeetCode-Min Stack
来源:互联网 发布:卖家开通淘宝达人 编辑:程序博客网 时间:2024/06/05 18:46
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.
所以就需要节省空间,不是每次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!!!
0 0
- LeetCode[stack]: Min Stack
- [leetcode][stack] Min Stack
- 【Leetcode】Min Stack
- Leetcode: Min Stack
- leetcode Min stack
- Min Stack -- LeetCode
- Leetcode: Min Stack
- 【LeetCode】Min Stack
- leetcode Min Stack
- leetcode--Min Stack
- [Leetcode]Min stack
- leetcode:Min Stack
- leetcode 之 Min Stack
- leetcode Min Stack
- LeetCode(155) Min Stack
- [LeetCode]Min Stack
- leetcode:Min Stack
- leetcode - Min Stack
- Linux中查看CPU信息
- 详解EBS接口开发之库存事务处理-物料批次导入
- leetcdoe 帕斯卡尔三角形2 Pascal's Triangle II
- Groovy 数据库应用开发实践-SQL对象托管和封装
- 数据结构(Java语言)——Queue简单实现
- LeetCode-Min Stack
- JavaScript设计模式——互动出版网
- iOS 音频播放的3中方式
- Qt:设置背景图片的三种方式(setAutoFillBackground)
- 设计模式:27 其实你不懂老板的心_解释器模式
- 正则表达式基础
- eclipse studio 使用
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
- iOS支付宝集成遇到的问题