LeetCodeHot100——155.最小栈

题目链接放在这里了:155. 最小栈 - 力扣(LeetCode)

这道题的思路就是要我们实现一个最小栈和它的基本几个功能,最小栈就是在一个栈的基础上,可以让我们知道这个栈任意时刻的最小值。我最初是想在一个栈的基础上加上一个属性用来存储最小值,如果你也这么想那么你就想的太简单了,如果栈里有5个元素,最小值肯定是确定了呗,那如果我们这时候pop了呢,那下一个最小值怎么确认?,难道还要存储倒数第二小的做备份吗,那倒数第二小的就不用更新了吗,依次往复我们是不是要记录从开始到结尾每个元素在栈顶时对应的最小值啊,那这样的话我们是不是就可以搞一个同步队列啊,根据栈里的对应关系,记录每个位置对应的最小值,这样是可以实现的,还有就是我们可以通过数组或者map的形式,我们的栈中存储的不再是简单的一个数字了,而是多个map或者多个大小为2的小数组,这样我们在push的时候,如果栈为空那就直接push(value,value),如果不为空那就peek()一下前一个的最小值,和这次要push的值做比较,取较小值作为当前值对应的最小值,这种思路下来我们在查看最小值的时候只需要peek然后查看最小值对应位置的元素就好了,这样栈中的每个元素都有其在栈顶时刻的最小值和value了;

下面是我的方法,我是使用了map,主要是想熟悉一下map的api,在我们不知道key值的时候想按序获取map的Key和Value使用map.entrySet().iterator().next().getValue()/getKey()来操作;

java 复制代码
class MinStack {
    private Deque<Map<Integer,Integer>> stack;
    public MinStack() {
        stack = new LinkedList<>();
    }
    
    public void push(int value) {
        Map<Integer,Integer> cur = new HashMap<>();
        if(stack.isEmpty()){
            cur.put(value,value);
        }else{
            int t = stack.peek().entrySet().iterator().next().getValue();
            cur.put(value,Math.min(value,t));
        }
        stack.push(cur);
    }
    
    public void pop() {
        if(!stack.isEmpty()){
            stack.pop();
        }
    }
    
    public int top() {
        return stack.peek().entrySet().iterator().next().getKey();
    }
    
    public int getMin() {
        return stack.peek().entrySet().iterator().next().getValue();
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(value);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */
相关推荐
2601_967760785 分钟前
2026年PDF压缩与页码添加工具技术实测:性能、算法与本地化适配深度对比
算法·pdf
不会就选b1 小时前
算法日常・每日刷题--<贪心>7
数据结构·算法·leetcode
moonrailgun1 小时前
用 Node.js 复刻 Codex Astra 的终端星光
前端·javascript·算法
罗西的思考2 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(1)--- 总体
人工智能·算法·机器学习
lvwangshu3 小时前
图论:LCA、树的直径、树的重心、二分图与 Tarjan 缩点
算法·图论
302wanger3 小时前
干与湿:AI 拿走脑力之后,人剩下什么
算法
计算机编程-吉哥4 小时前
脑肿瘤MRI智能识别系统:基于深度学习的像素级脑肿瘤语义分割平台【计算机毕业设计选题推荐】
人工智能·python·深度学习·算法·毕业设计·课程设计·大数据毕业设计选题推荐
用户204937554954 小时前
端侧语音部署踩坑:模型能跑不等于终端真的能用
后端·算法
shehuiyuelaiyuehao5 小时前
算法39,位运算,消失的两个数字
java·数据结构·算法
ZiLing5 小时前
2026 ROS 2 Lyrical 踩坑实录(一):编译与依赖——rosdep、现代 CMake 与 CMake 4.x
算法