博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode刷题155 最小栈 Min Stack(简单) Python Java
阅读量:4129 次
发布时间:2019-05-25

本文共 2376 字,大约阅读时间需要 7 分钟。

题目概述:

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。

示例

MinStack minStack = new MinStack();

minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.

class MinStack(object):     def __init__(self):        """        initialize your data structure here.        """        self.stack = []   # 存放所有元素        self.minStack = []  # 存放每一次压入数据时,栈中的最小值(如果压入数据的值大于栈中的最小值就不需要重复压入最小值,小于或者等于栈中最小值则需要压入)     def push(self, x):        """        :type x: int        :rtype: void        """        self.stack.append(x)        if not self.minStack or self.minStack[-1]>=x:            self.minStack.append(x)     def pop(self):   # 移除栈顶元素时,判断是否移除栈中最小值        """        :rtype: void        """        if self.minStack[-1]==self.stack[-1]:            del self.minStack[-1]        self.stack.pop()     def top(self):        """        :rtype: int        """        return self.stack[-1]            def getMin(self):        """        :rtype: int        """        return self.minStack[-1]

 

以下是Java版本:

1.class MinStack {  2.    // stack: store the stack numbers  3.    private Stack
 stack = new Stack
();  4.    // minStack: store the current min values  5.    private Stack
 minStack = new Stack
();  6.  7.    public void push(int x) {  8.        // store current min value into minStack  9.        if (minStack.isEmpty() || x <= minStack.peek())  10.            minStack.push(x);  11.        stack.push(x);  12.    }  13.  14.    public void pop() {  15.        // use equals to compare the value of two object, if equal, pop both of them  16.        if (stack.peek().equals(minStack.peek()))  17.            minStack.pop();  18.        stack.pop();  19.    }  20.  21.    public int top() {  22.        return stack.peek();  23.    }  24.  25.    public int getMin() {  26.        return minStack.peek();  27.    }  28.}  

【分析】

这道题的关键之处就在于 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 中所处的位置。

转载地址:http://vsuvi.baihongyu.com/

你可能感兴趣的文章
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
关于无线PCB中 中50欧姆的特性阻抗的注意事项
查看>>
Spring的单例模式源码小窥
查看>>
后台服务的变慢排查思路(轻量级应用服务器中测试)
查看>>
MySQL中InnoDB事务的默认隔离级别测试
查看>>
微服务的注册与发现
查看>>
bash: service: command not found
查看>>
linux Crontab 使用 --定时任务
查看>>
shell编程----目录操作(文件夹)
查看>>
机器学习-----K近邻算法
查看>>
HBASE安装和简单测试
查看>>
关于程序员的59条搞笑但却真实无比的编程语录
查看>>
搞笑--一篇有趣的文章编译自一篇西班牙博客。有一位美丽的公主,被关押在一个城堡中最高的塔上,一条凶恶的巨龙看守着她,需要有一位勇士营救她…
查看>>
非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)
查看>>
Tomcat启动错误,端口占用
查看>>