剑指offer-20-包含min函数的栈

包含min函数的栈_牛客网

https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49?tpId=13&tqId=11173&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

在看到这道题目的时候第一反应是要用一个最小值来保留当前栈中最小值,但是也能够很快地意识到比较麻烦的地方在于pop的时候怎么更新min值,看了别人的题解之后都是使用了另外一个栈来保持在入栈过程中曾经做过最小值的值,pop的时候判断两个栈顶元素是否一致,一致的话都要pop,在这种情况下取最小值需要从保存最小值的栈顶元素取值

另外一点是这道题目也顺便联系java中Stack的常用的方法empty(); push(); pop();peek();比较坑爹的时元素需要定义为static的并且要手动初始化,不然list会被初始化为null

我自己的想法是不希望用另外一个栈,那么为了实现这一目的,在栈中需要保留冗余的曾经的最小值,这样能够比较方便到找到当前的此小值,具体见下面的代码

import java.util.Stack;

public class Solution {

    //需要这样写来初始化stack,不然会报空指针push的时候
    private static Stack<Integer> stack = new Stack<Integer>();
    private static Intege

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

小白刷剑指offer 文章被收录于专栏

跟着小白一起刷剑指offer,通过讨论加深印象吧~ 没有人不学习就能够掌握知识,知识就是需要学习的~

全部评论
push一个值之后,再push一个更小值,此时再pop两次,再取top就会有问题吧,栈会多存一次次小值 比如说push3 push4 push2 push1,此时最小是1,栈内是:343221,然后我pop后栈就变成了:34322,最小值变成2,再pop就变成,3432,此时取top就是2,然而答案应该是4
1
送花
回复
分享
发布于 2021-05-16 19:53
这个是不是连续两次弹出最小值后,存储的最小值是错误的啊?😰
点赞
送花
回复
分享
发布于 2019-09-09 21:22
网易互娱
校招火热招聘中
官网直投
14行那,是不是应该是.     if(node < =minElement){ 不然会出bug,还有就是剩一个的时候可能也会出,没仔细想
点赞
送花
回复
分享
发布于 2019-09-17 22:30
思路不对吧,假如第一次弹次小值,第二次弹最小值,再弹的时候已经是第三小的值了,然而你的结果会是第二小的值
点赞
送花
回复
分享
发布于 2020-01-20 22:09
非常好的思路,做了下修改更简洁: public void push(int node){ if(node<=min){ stack.push(minElement); minElement=node; } stack.push(node); } public void pop(){ if(stack.pop()==minElement)minElement=stack.pop(); }
点赞
送花
回复
分享
发布于 2020-02-28 06:36
请教两个问题: 1 实例变量没必要定义成 static吧 2 题干中说的当为空的时候不能调用top(), min(), pop() 等方法,前两个答主好像并没有处理
点赞
送花
回复
分享
发布于 2020-04-21 10:01
1 2 3 4 0 1 0
点赞
送花
回复
分享
发布于 2020-04-26 21:53
放的时候好像不需要判断空,直接把最大值放进去,并且pop也不需要判断是否等于1了
点赞
送花
回复
分享
发布于 2020-05-12 00:28

相关推荐

投递华为等公司9个岗位
点赞 评论 收藏
转发
37 2 评论
分享
牛客网
牛客企业服务