题目描述:

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.

解题思路:

这个问题挺简单(确实leetcode给的评级也是easy),但是还真是遇上了不少的问题。
首先,这道题目我们的想法是如何去做到这个特殊的getMin,想到的方法当然是空间换时间啦,那么用什么空间呢?当然是另一个栈啦,所以我们就有了这么一个想法:用另一个栈来记录当前最小值,那么查找最小值就不需要遍历了,这样就实现了时间复杂度和空间复杂度都是O(n)。的确这个想法已经很不错了,用java(官方题解就是这个版本)和C++(亲测)。但是我用python就MLE了,让我纠结了好久。
所以在没办法就要优化内存了,这里采用的方法是在minStack中插值的时候对相同的值不重复插入,而是记录他的次数,终于AC

MLE

 class MinStack:
def __init__(self):
self.stack = []
self.minStack = []
# @param x, an integer
# @return an integer
def push(self, x):
self.stack.append(x)
if len(self.minStack) == 0 or self.minStack[-1] >= x:
#print 'minn change'
self.minStack.append(x) # @return nothing
def pop(self):
p = self.stack.pop()
#print 'pop ' , p
if p == self.minStack[-1]:
#print 'minn pop'
self.minStack.pop() # @return an integer
def top(self):
return self.stack[-1] # @return an integer
def getMin(self):
return self.minStack[-1]

AC

 class MinStack:
def __init__(self):
self.stack = []
self.minStack = []
#self.minStack.append(0)
# @param x, an integer
# @return an integer
def push(self, x):
self.stack.append(x)
if len(self.minStack) == 0 or self.minStack[-1][0] > x:
#print 'minn change'
self.minStack.append((x,1))
elif x == self.minStack[-1][0]:
self.minStack[-1] = (x, self.minStack[-1][1] + 1) # @return nothing
def pop(self):
p = self.stack.pop()
#print 'pop ' , p
if p == self.minStack[-1][0]:
if self.minStack[-1][1] > 1:
#print 'minn pop'
self.minStack[-1] = (self.minStack[-1][0], self.minStack[-1][1] - 1)
else:
self.minStack.pop() # @return an integer
def top(self):
return self.stack[-1] # @return an integer
def getMin(self):
#print self.minStack
return self.minStack[-1][0]

【leetcode】Min Stack -- python版的更多相关文章

  1. [leetcode] Min Stack @ Python

    原题地址:https://oj.leetcode.com/problems/min-stack/ 解题思路:开辟两个栈,一个栈是普通的栈,一个栈用来维护最小值的队列. 代码: class MinSta ...

  2. leetCode Min Stack解决共享

    原标题:https://oj.leetcode.com/problems/min-stack/ Design a stack that supports push, pop, top, and ret ...

  3. LeetCode: Min Stack 解题报告

    Min Stack My Submissions Question Solution Design a stack that supports push, pop, top, and retrievi ...

  4. [LeetCode] Min Stack 最小栈

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

  5. [LeetCode] Min Stack

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

  6. LeetCode——Min Stack

    Description: Design a stack that supports push, pop, top, and retrieving the minimum element in cons ...

  7. LeetCode() Min Stack 不知道哪里不对,留待。

    class MinStack { public: MinStack() { coll.resize(2); } void push(int x) { if(index == coll.size()-1 ...

  8. [LeetCode] Min Stack 栈

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

  9. LeetCode Min Stack 最小值栈

    题意:实现栈的四个基本功能.要求:在get最小元素值时,复杂度O(1). 思路:链表直接实现.最快竟然还要61ms,醉了. class MinStack { public: MinStack(){ h ...

随机推荐

  1. 软件卸载工具 Uninstall Tool 3.5.1 中文破解版

    Uninstall Tool 是一个小巧.安全.快速.强大的软件卸载删除工具,它支持在使用软件本身的卸载程序卸载完毕后,再扫描软件残留的注册及其它残余文件,将其彻底在系统删除!安装监视器可以监视每个应 ...

  2. Thinking in java学习笔记之map的应用

    Random rand = new Random(47); Map<Integer,Integer> m = new HashMap<Integer,Integer>(); f ...

  3. IntelliJ IDEA For Mac 快捷键

    Mac键盘符号和修饰键说明 ⌘ Command ⇧ Shift ⌥ Option ⌃ Control ↩︎ Return/Enter ⌫ Delete ⌦ 向前删除键(Fn+Delete) ↑ 上箭头 ...

  4. HTML5新标签 w3c

    w3c标准下的HTML5新标签 ,做个归纳总结: H5标签 定义和用法 兼容性 <artical> 规定独立的自包含内容, 支持html中的全局属性, 支持html中的事件属性 IE: 支 ...

  5. Oracle 数据导入导出

    一.导出模式(三种模式)及命令格式 1. 全库模式 exp 用户名/密码@网络服务名 full=y file=路径\文件名.dmp log=路径\文件名.log 2. 用户模式(一般情况下采用此模式) ...

  6. margin双边距的问题

    margin:20px;height:20px;float:left margin:20px;height:20px;float:left

  7. centos7删除自带openjdk

    一些开发版的centos会自带jdk,我们一般用自己的jdk,把自带的删除.先看看有没有安装java -version [root@java-test-01 ~]# java -version ope ...

  8. C:Wordpress自定义文章类型(图视频)

    自定义文章类型,包括: 1:单独的"文章内容模板" 2:单独的"文章列表模板" 3:单独的"控制后台"(文章分类.添加文章) 创建自定义文章 ...

  9. bzoj1854 游戏

    Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性 ...

  10. R语言进行数据预处理wranging

    R语言进行数据预处理wranging li_volleyball 2016年3月22日 data wrangling with R packages:tidyr dplyr Ground rules ...