首页 > 其他分享 >155. 最小栈

155. 最小栈

时间:2024-01-22 17:58:44浏览次数:20  
标签:MinStack int top 最小 pop getMin push 155

1.题目介绍

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

实现 MinStack 类:
MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。

示例 1:
输入:
["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.

2.题解

2.1 辅助栈

注意下在空栈时,往最小栈填充一个无限大,防止空栈时调用getMin();

思路

使用两个栈数据结构来存储,一个用来存储栈数据,一个同步存储栈中最小数据,和栈同步push,pop

代码

class MinStack {
public:
    MinStack() {
        minStk.push(INT_MAX);
    }
    
    void push(int val) {
        stk.push(val);
        minStk.push(min(val, minStk.top()));    
    }
    
    void pop() {
        stk.pop();
        minStk.pop();
    }
    
    int top() {
        return stk.top();
    }
    
    int getMin() {
        return minStk.top();
    }
private:
    stack<int> stk;
    stack<int> minStk;
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(val);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */

标签:MinStack,int,top,最小,pop,getMin,push,155
From: https://www.cnblogs.com/trmbh12/p/17980596

相关文章

  • CF1552B Running for Gold
    CF1552BRunningforGold题目传送门题面奥运比赛刚刚开始,Federico便十分渴望观看比赛。有\(n\)个选手参加了马拉松比赛,从\(1\)到\(n\)依次编号。她们都参加了\(5\)项比赛,比赛从\(1\)到\(5\)编号。现在有一个二维的数组\(r_{i,j}(1\leqi\leqn,1\leqj\le......
  • LG9155
    看到$n\le10^5$,就知道这题不是纯模拟。又看到了$0\led<2^{16}$,发现特殊的地方,于是就考虑使用二进制。具体地,我们对两种操作分类讨论(题目中的字符打不出来,用\(l\)代替)。操作一在二进制下,将二进制数左移一位相当于将原数乘\(2\)。不过由于数据范围很大,我们暂时先将......
  • 用C#实现最小二乘法(用OxyPlot绘图)✨
    最小二乘法介绍✨最小二乘法(LeastSquaresMethod)是一种常见的数学优化技术,广泛应用于数据拟合、回归分析和参数估计等领域。其目标是通过最小化残差平方和来找到一组参数,使得模型预测值与观测值之间的差异最小化。最小二乘法的原理✨线性回归模型将因变量(y)与至少一个自变量......
  • 使用最小花费爬楼梯 动态规划初理解
    该题是动态规划入门程度,但最开始做的时候还是无从下手。我觉得卡哥给的步骤很重要:确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组首先明确dp数组(dptable)以及下标的含义很重要,最开始做这道题的时候,设了dp但不知道是代表什么。......
  • CF-720-E- 最短路+最小生成树
    1051-F题目大意给定一个\(n\)个点\(m\)条边的无向联通图,边带权。有\(q\)次询问,每次询问两点\(x,y\)直接的最短路的长度。Solution注意到\(m-n{\le}20\),那么整个图可以视为一个生成树加上不超过\(21\)条非树边构成的图,这些非树边构成一个边集\(E\)。先把整个图的最小生成树搞......
  • m基于码率兼容打孔LDPC码ms最小和译码算法的LDPC编译码matlab误码率仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要码率兼容打孔LDPC码BP译码算法是一种改进的LDPC译码算法,能够在不同码率下实现更好的译码性能。该算法通过在LDPC码中引入打孔操作,使得码率可以灵活地调整,同时利用BP(BeliefPropagation)译码算法进行迭代译码,提高了......
  • m基于码率兼容打孔LDPC码ms最小和译码算法的LDPC编译码matlab误码率仿真
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要       码率兼容打孔LDPC码BP译码算法是一种改进的LDPC译码算法,能够在不同码率下实现更好的译码性能。该算法通过在LDPC码中引入打孔操作,使得码率可以灵活地调整,同时利用BP(BeliefPropagation......
  • 代码随想录 day21 二叉搜索树的最小绝对差 二叉搜索树中的众数 二叉树的最近公共祖先
    二叉搜索树的最小绝对差二叉搜索树就是有序数组那么转换一下就很简单了也可以直接在遍历二叉搜索树的时候进行比较需要一个指针记录前一个节点二叉搜索树中的众数既可以把这题的二叉搜索树当成一般树来做这样就是层序遍历树然后用map记录频率再取频率最高的值这里用......
  • P1558 色板游戏
    原题链接题解1,种30棵树,每棵树代表每种颜色,树的每个节点代表这个颜色在对应区间上是否存在code#include<bits/stdc++.h>usingnamespacestd;intst[32][400005]={0};intlazy[32][400005]={0};voidpushdown(intwho,intnode){st[who][node*2]=lazy[who][node];......
  • MST(最小生成树)学习感悟
    MST(最小生成树)学习感悟MST,最小生成树,一个有n个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有n个结点,并且有保持图连通的最少的边。——百度百科对于最小生成树,有几个比较常见的性质:对于任意最小生成树,它包含所有的n个节点以及n-1条边。若边权都不相......