用stack实现min stack
遇到个好玩的问题,就是用一个stack实现min stack,什么意思呢,就是我实现stack,但是能以O(1)的时间复杂度和空间复杂度去找到我stack里面的最小值。
常规的方法是:用一个变量存放当前最小值,但是会出现这种情况,就是当我的stack pop掉的值刚好是最小值时候,后面就没法知道当前的最小值了。
怎么办呢?可以考虑在push阶段做个改变,就是在我每次往stack里面push数据的时候,跟当前的最小值比较,如果比当前最小值还小的话,那么将当前最小值入栈,再把最小值修改为这个值。在pop阶段,如果遇到pop出来的值刚好等于当前的最小值,那么将下一个值pop出来,并将pop出来的值设置为当前栈中最小值,这个值就是在push阶段时放进去的,表明这个位置的下面位置都比这个值小。
附录python源码:
class MinStack(object): def __init__(self): self.stack = []
self.min = 0 def push(self, m): if(len(self.stack) == 0):
self.min_ = m
self.stack.append(m)
else:
if m <= self.min_:
self.stack.append(self.min_)
self.min_ = m
self.stack.append(m)
else:
self.stack.append(m) def pop(self): if self.stack[len(self.stack) - 1] == self.min_:
self.stack.pop()
self.min_ = self.stack.pop()
else:
self.stack.pop() def get_min(self):
return self.min_ if __name__ == '__main__':
min_stack = MinStack()
min_stack.push(4)
min_stack.push(5)
min_stack.push(7)
min_stack.push(6)
min_stack.push(-3)
min_stack.push(-6)
min_stack.push(18)
min_stack.pop()
min_stack.pop()
print min_stack.get_min()
用stack实现min stack的更多相关文章
- 带最小值操作的栈 · Min Stack
[抄题]: 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. [思维问题]: [一句话思 ...
- [LintCode] Min Stack 最小栈
Implement a stack with min() function, which will return the smallest number in the stack. It should ...
- [CareerCup] 3.2 Min Stack 最小栈
3.2 How would you design a stack which, in addition to push and pop, also has a function min which r ...
- leetcode 155. Min Stack --------- java
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...
- Min Stack [LeetCode 155]
1- 问题描述 Design a stack that supports push, pop, top, and retrieving the minimum element in constant ...
- Min Stack
Min Stack Design a stack that supports push, pop, top, and retrieving the minimum element in constan ...
- 【leetcode】155 - 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)时间内完成. 解题 可以定义 ...
- Java [Leetcode 155]Min Stack
题目描述: Design a stack that supports push, pop, top, and retrieving the minimum element in constant ti ...
随机推荐
- ubuntu16.04 python3.5 opencv的安装与卸载(转载)
转载https://blog.csdn.net/qq_37541097/article/details/79045595 Ubuntu16.04 自带python2.7和python3.5两个版本,默 ...
- 哥德巴赫猜想-nefu2 & 分拆素数和 hdu2098
哥德巴赫猜想-nefu2 & 分拆素数和 hdu2098 //哥德巴赫猜想 #include <iostream> #include <cmath> #include ...
- 组合数模板 - Lucas
2017-08-10 19:35:32 整理者:pprp 用于计算C(m,n) % p 代码如下: //lucas #include <iostream> using namespace ...
- sql server 跨数据库调用存储过程
A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( ) =null , ) =null ) AS BEGIN select N'A' AS a , N'B' ...
- HDU 1827 Summer Holiday
http://acm.hdu.edu.cn/showproblem.php?pid=1827 题意: 听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家 ...
- Android开发-网络通信1
使用 org.apache.http.client.HttpClient; 一开始从官网下载HttpClient 4.5:http://hc.apache.org/downloads.cgi ,解压之 ...
- 用gitolite搭建git server
在Ubuntu上测试安装一下git server,为后面项目的代码管理做准备.记录流水账如下, 中间关于git 命令的使用说明不做过多解释,需要了解的请google或者直接git help: 我用到了 ...
- python爬虫之下载京东页面图片
import requests from bs4 import BeautifulSoup import time import re t = 0 #用于给图片命名 for i in range(10 ...
- 学习JVM
所谓虚拟机,就是一台虚拟的机器.它是一款软件,用来执行一系列虚拟计算机指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机,大名鼎鼎的Visual Box.VMware就属于系统虚拟机,他们完全是对物理计 ...
- Verilog HDL Test Bench
As digital systems becomes more complex,it becomes increasingly important to verify the functionalit ...