LeetCode 155. 最小栈 哈希 栈

地址 https://leetcode-cn.com/problems/min-stack/

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

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

示例:

输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]

输出:
[null,null,null,null,-3,null,0,-2]

解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.
 

提示:

pop、top 和 getMin 操作总是在 非空栈 上调用。

 
复制代码

 

解答

算法1

使用栈记录最小栈的基本操作

最小值则考虑一个方便搜索排序的结构体,那么考虑map。

unordered_map则不行,因为他是哈希实现的无法排序.

最大最小堆则不方便删除,也不考虑

复制代码
class MinStack {
public:
    /** initialize your data structure here. */
    stack<int> st;
    map<int,int> mm;
    MinStack() {

    }

    void push(int x) {
        st.push(x);
        mm[x]++;
    }

    void pop() {
        int val =st.top();
        st.pop();
        mm[val]--;
    }

    int top() {
        return st.top();
    }

    int getMin() {
        auto it = mm.begin();
        while(it!=mm.end() && it->second == 0) it++;

        if(it!=mm.end()) return it->first;
        return -1;
    }
};
复制代码

 

posted on   itdef  阅读(188)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
历史上的今天:
2019-12-15 LeetCode 1289 下降路径最小和 II Minimum Falling Path Sum II
2019-12-15 LeetCode 1288. 删除被覆盖区间 Remove Covered Intervals
2019-12-15 LeetCode 1287. 有序数组中出现次数超过25%的元素 Element Appearing More Than 25% In Sorted Array
2019-12-15 LeetCode 1286. 字母组合迭代器 Iterator for Combination

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示