带最小值操作的栈 · Min Stack
[抄题]:
实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。
你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。
[思维问题]:
想不到,脑洞不够大
[一句话思路]:
用一个minstack来辅助实现
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
- 主函数中,数据结构为类+名 类是Stack<Integer>
- minStack.empty() == true 或者isempty都可以
- pop分为两种情况:二者peek(不是peak)相等的、不相等的; 方法加点来用
[二刷]:
- push可能有空的情况,要注意
[总结]:top只是看一看,peek也只是看一看。所以top里面包含peek
[复杂度]:Time complexity: O(1) Space complexity: O(n)
[英文数据结构,为什么不用别的数据结构]:
[其他解法]:
[Follow Up]:
[题目变变变]:
public class MinStack {
private Stack<Integer> stack;
private Stack<Integer> minStack; public MinStack() {
// do intialization if necessary
stack = new Stack<Integer>();
minStack = new Stack<Integer>();
} /*
* @param number: An integer
* @return: nothing
*/
public void push(int number) {
// write your code here
stack.push(number);
if (minStack.isEmpty()) {
minStack.push(number);
}
else {
if (number <= minStack.peek()) {
minStack.push(number);
}
}
} /*
* @return: An integer
*/
public int pop() {
// write your code here
if (stack.peek().equals(minStack.peek())) {
minStack.pop();
}
return stack.pop();
} /*
* @return: An integer
*/
public int min() {
// write your code here
return minStack.peek();
}
}
class MinStack {
Stack<Integer> stack = new Stack<Integer>();
Stack<Integer> minStack = new Stack<Integer>(); /** initialize your data structure here. */
public MinStack() {
Stack<Integer> stack = new Stack<Integer>();
Stack<Integer> minStack = new Stack<Integer>();
} public void push(int x) {
//stack: push
stack.push(x);//s:2 //min stack:push when it's null or minimum
if (minStack.isEmpty()) {
minStack.push(x);
} else if (x <= minStack.peek()) {
minStack.push(x); //ms:2
}
} public void pop() {
//stack:get, min stack: pop when it's mean
if (minStack.peek().equals(stack.peek())) {
minStack.pop(); //both 2, ms pop 2
}
stack.pop(); //s pop 2
} public int top() {
return stack.peek(); //return s pop 2
} public int getMin() {
return minStack.peek(); //return ms pop 2
}
} /**
* 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();
*/
解法2: 只用1个stack
[抄题]:
[暴力解法]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
[思维问题]:
不懂题目意思:设计新的数据结构。原生的stack中本来就有push pop peek方法
[一句话思路]:
刷新最小值时 stack中存2个 留着最小值备胎。否则只存1个 要走就走,下面一层还是最小值。
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
- pop一个元素之后把备胎也pop出去,以便于下次的pop, 不留痕迹
- class中声明后,MinStack()方法用于建立新的数据类型(真心是没话可说了)
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
备胎需要斩草除根
[复杂度]:Time complexity: O(1) Space complexity: O(n)
都是立存立取的
[英文数据结构或算法,为什么不用别的数据结构或算法]:
原生的stack中本来就有push pop peek方法
[关键模板化代码]:
[其他解法]:
2个stack
[Follow Up]:
[LC给出的题目变变变]:
716. Max Stack 2个stack
[代码风格] :
带最小值操作的栈 · Min Stack的更多相关文章
- lintcode12 带最小值操作的栈
实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 建一个栈helpStack,用来存放从 ...
- LintCode-12.带最小值操作的栈
带最小值操作的栈 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 注意事项 如果堆栈中 ...
- LintCode 12.带最小值操作的栈(两种方法实现)
题目描述 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 样例 如下操作:push(1 ...
- [LintCode] 带最小值操作的栈
class MinStack { public: MinStack() { // do initialization if necessary } void push(int number) { // ...
- LeetCode 155:最小栈 Min Stack
LeetCode 155:最小栈 Min Stack 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- ...
- [Swift]LeetCode155. 最小栈 | Min Stack
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...
- lintcode 中等题:Min stack 最小栈
题目 带最小值操作的栈 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 解题 可以定义 ...
- LeetCode 刷题笔记 155. 最小栈(Min Stack)
tag: 栈(stack) 题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素 ...
- [LeetCode] 0155. Min Stack 最小栈 & C++Runtime加速
题目 Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. ...
随机推荐
- [UE4]产生开枪特效
- C++多线程同步之临界区(CriticalSection)
原文链接:http://blog.csdn.net/olansefengye1/article/details/53262917 一.Win32平台 1.相关头文件和接口 #include <w ...
- Select算法(最坏复杂度O(n))
#include<iostream> #include <stdio.h> #include <stdlib.h> #include <algorithm&g ...
- 20180129周一之学习PYTHON笔记【PYTHON2写个自动点击学习功能】
pyautogui.click(pyautogui.center(pyautogui.locateOnScreen('sy.png'))) #点击该截图一次 --------------------- ...
- linux命令--df/ps aux/netstat/hostname/tail
查询文件系统 df -h 查询cpu使用情况 top 进程查看: ps aux | grep haproxy 端口查看: netstat -lntup 主机名查看 hostname 查看文件末尾字符串 ...
- python实现一个栏目的分页抓取列表页抓取
python实现一个栏目的分页抓取列表页抓取 #!/usr/bin/env python # coding=utf-8 import requests from bs4 import Beautifu ...
- 使用curl发起https请求
"SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:S ...
- canal HA配置
https://github.com/alibaba/canal/wiki/AdminGuide#ha%E6%A8%A1%E5%BC%8F%E9%85%8D%E7%BD%AE HA模式配置 1. 机器 ...
- [ERR] Not all 16384 slots are covered by nodes.
redis集群开不起来,用redis-cli连接的时候出现如下错误: CLUSTERDOWN The cluster is down 然后使用redis-trib.rb检查: ./redis-trib ...
- ArcGIS模型构建器案例学习-批量删除空要素类地理模型
ArcGIS模型构建器案例学习笔记-批量删除空要素类地理模型 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:批量删除记录个数为0的矢量文件 优点:逻辑清晰,不 ...