【LeetCode】Min Stack 解题报告
来源:互联网 发布:六级词汇书推荐知乎 编辑:程序博客网 时间:2024/04/29 05:16
http://blog.csdn.net/ljiabin/article/details/40982153
Hints:
- Consider space-time tradeoff. How would you keep track of the minimums using extra space?
- Make sure to consider duplicate elements.
O(n) runtime, O(n) space – Extra stack:
Use an extra stack to keep track of the current minimum value. During the push operation we choose the new element or the current minimum, whichever that is smaller to push onto the min stack.
O(n) runtime, O(n) space – Minor space optimization:
If a new element is larger than the current minimum, we do not need to push it on to the min stack. When we perform the pop operation, check if the popped element is the same as the current minimum. If it is, pop it off the min stack too.
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.
来自:https://oj.leetcode.com/discuss/15659/simple-java-solution-using-two-build-in-stacks?state=edit-15691&show=15659#q15659
- class MinStack {
- // stack: store the stack numbers
- private Stack<Integer> stack = new Stack<Integer>();
- // minStack: store the current min values
- private Stack<Integer> minStack = new Stack<Integer>();
- public void push(int x) {
- // store current min value into minStack
- if (minStack.isEmpty() || x <= minStack.peek())
- minStack.push(x);
- stack.push(x);
- }
- public void pop() {
- // use equals to compare the value of two object, if equal, pop both of them
- if (stack.peek().equals(minStack.peek()))
- minStack.pop();
- stack.pop();
- }
- public int top() {
- return stack.peek();
- }
- public int getMin() {
- return minStack.peek();
- }
- }
【分析】
这道题的关键之处就在于 minStack 的设计,push() pop() top() 这些操作Java内置的Stack都有,不必多说。
我最初想着再弄两个数组,分别记录每个元素的前一个比它大的和后一个比它小的,想复杂了。
第一次看上面的代码,还觉得它有问题,为啥只在 x<minStack.peek() 时压栈?如果,push(5), push(1), push(3) 这样minStack里不就只有5和1,这样pop()出1后, getMin() 不就得到5而不是3吗?其实这样想是错的,因为要想pop()出1之前,3就已经被pop()出了。.
minStack 记录的永远是当前所有元素中最小的,无论 minStack.peek() 在stack 中所处的位置。
【不用内置Stack的实现】
来自:https://oj.leetcode.com/discuss/15651/my-java-solution-without-build-in-stack
- class MinStack {
- Node top = null;
- public void push(int x) {
- if (top == null) {
- top = new Node(x);
- top.min = x;
- } else {
- Node temp = new Node(x);
- temp.next = top;
- top = temp;
- top.min = Math.min(top.next.min, x);
- }
- }
- public void pop() {
- top = top.next;
- return;
- }
- public int top() {
- return top == null ? 0 : top.val;
- }
- public int getMin() {
- return top == null ? 0 : top.min;
- }
- }
- class Node {
- int val;
- int min;
- Node next;
- public Node(int val) {
- this.val = val;
- }
- }
- 【LeetCode】Min Stack 解题报告
- 【LeetCode】Min Stack 解题报告
- [LeetCode]Min Stack,解题报告
- LeetCode-Min Stack-解题报告
- [leetcode] 155. Min Stack 解题报告
- [Leetcode] 155. Min Stack 解题报告
- Min Stack 解题报告
- 解题报告: #115 Min Stack
- leetCode Min Stack解题分享
- leetcode解题方案--155--min stack
- LeetCode[stack]: Min Stack
- [leetcode][stack] Min Stack
- 【LeetCode】Implement Stack using Queues 解题报告
- LeetCode-Implement Stack using Queues-解题报告
- 【LeetCode】Implement Stack using Queues 解题报告
- leetcode解题之155# Min Stack Java版 (包含min函数的栈)
- 【Leetcode】Min Stack
- Leetcode: Min Stack
- Java反射工具类
- 解析
- jsp+java用pageoffice在线编辑office文档
- iPhone 中使用NSLocalizedString实现国际化
- 【BZOJ2631】tree Link-Cut-Tree
- 【LeetCode】Min Stack 解题报告
- 白书 回文 镜像
- android sqlite db-journal文件产生原因及说明 .
- UVAOJ 10115 ——Automatic Editing 模拟
- AndroidManifest.xml文件详解(uses-configuration)
- hsql数据库实现
- 如何删除ctrl+alt+方向键的旋转屏幕功能
- 获取和判断当前手机状态和信息
- 【DataGuard安装】Oracle单实例到RAC用duplicate active database做DataGuard之二