[抄题]:

实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。

你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。

[思维问题]:

想不到,脑洞不够大

[一句话思路]:

用一个minstack来辅助实现

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. 主函数中,数据结构为类+名 类是Stack<Integer>
  2. minStack.empty() == true 或者isempty都可以
  3. pop分为两种情况:二者peek(不是peak)相等的、不相等的; 方法加点来用

[二刷]:

  1. 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个 要走就走,下面一层还是最小值。

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. pop一个元素之后把备胎也pop出去,以便于下次的pop, 不留痕迹
  2. 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的更多相关文章

  1. lintcode12 带最小值操作的栈

    实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 建一个栈helpStack,用来存放从 ...

  2. LintCode-12.带最小值操作的栈

    带最小值操作的栈 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 注意事项 如果堆栈中 ...

  3. LintCode 12.带最小值操作的栈(两种方法实现)

    题目描述 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 样例 如下操作:push(1 ...

  4. [LintCode] 带最小值操作的栈

    class MinStack { public: MinStack() { // do initialization if necessary } void push(int number) { // ...

  5. LeetCode 155:最小栈 Min Stack

    LeetCode 155:最小栈 Min Stack 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- ...

  6. [Swift]LeetCode155. 最小栈 | Min Stack

    Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...

  7. lintcode 中等题:Min stack 最小栈

    题目 带最小值操作的栈 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 解题 可以定义 ...

  8. LeetCode 刷题笔记 155. 最小栈(Min Stack)

    tag: 栈(stack) 题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素 ...

  9. [LeetCode] 0155. Min Stack 最小栈 & C++Runtime加速

    题目 Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. ...

随机推荐

  1. shell脚本函数

    不调用就不执行 调用就执行 调用时候的$1是指执行时候的参数1 调用之后的$是位置参数

  2. 战争迷雾Fog Of War

    参考:https://forums.unrealengine.com/community/community-content-tools-and-tutorials/26436-tutorial-fo ...

  3. redis 导出

    1 安装redis: apt update apt-get install redis-server 2: cd /etc/redis 3:  用redis-cli导出key redis-cli -h ...

  4. Parallel I/O and Columnar Storage

    Parallel I/O and Columnar Storage We begin with a high level overview of the system while follow up ...

  5. Python模块之shelve

    shelve是python的自带model. 可以直接通过import shelve来引用. shelve类似于一个存储持久化对象的持久化字典,即字典文件. 使用方法也类似于字典. 保存对象至shel ...

  6. SparkStreaming 的编程模型

    依赖管理 基本套路 Dstream输入源 ---input DStream Dstream输入源--- Receiver 内置的input Dstream : Basic Source 内置的inpu ...

  7. 文件系统性能测试--iozone

    iozone 一个文件系统性能评测工具,可以测试Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, ...

  8. windows环境下简单Jenkins持续集成搭建

    Jenkins是基于Java开发的持续集成工具,所以在安装Jenkins之前我们要确定电脑上已经安装了Java JDK并且环境变量配置正确,否则在启动使用java -jar Jenkins.war启动 ...

  9. face,Pool

    .a 在使用Python进行系统管理时,特别是同时操作多个文件目录或者远程控制多台主机,并行操作可以节约大量的时间.如果操作的对象数目不大时,还可以直接使用Process类动态的生成多个进程 ,十几个 ...

  10. linux case ${variable} in

    脚本实现划分考试等级层次;