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

155. 最小栈

时间:2023-10-03 14:11:07浏览次数:32  
标签:node pre 155 int 最小 next push stack

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

实现 MinStack 类:

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


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

思路一:辅助栈


class MinStack {
    stack<int> x_stack;
    stack<int> min_stack;
public:
    MinStack() {
        min_stack.push(INT_MAX);
    }
    
    void push(int x) {
        x_stack.push(x);
        min_stack.push(min(min_stack.top(), x));
    }
    
    void pop() {
        x_stack.pop();
        min_stack.pop();
    }
    
    int top() {
        return x_stack.top();
    }
    
    int getMin() {
        return min_stack.top();
    }
};

思路二:LRU


class node{
public:
    int val;
    node* next;
    node* pre;
    node(int v){
        this->val = v;
    }
};

class doublelist{
private:
    node* head;
    node* r;
public:
    doublelist(){
        head = new node(INT_MIN);
        r = new node(INT_MAX);
        head->next = r;
        r->pre = head;
    }
    void add(node* n){
        node* p = head->next;
        while(n->val > p->val){
            p = p->next;
        }
        node* pre = p->pre;
        pre->next = n;
        n->pre = pre;
        n->next = p;
        p->pre = n;
    }
    void remove(node *n){
        n->pre->next = n->next;
        n->next->pre = n->pre;
    }
    int get_head(){
        node* min = head->next;
        return min->val;
    }
};

class MinStack {
private:
    stack<node*> sta;
    doublelist cache;
public:
    MinStack() {

    }
    
    void push(int val) {
        node* cur = new node(val);
        sta.push(cur);
        cache.add(cur);
    }
    
    void pop() {
        node* cur = sta.top();
        sta.pop();
        cache.remove(cur);
    }
    
    int top() {
        node* cur = sta.top();
        return cur->val;
    }
    
    int getMin() {
        return cache.get_head();
    }
};

标签:node,pre,155,int,最小,next,push,stack
From: https://www.cnblogs.com/lihaoxiang/p/17741102.html

相关文章

  • 153. 寻找旋转排序数组中的最小值
    已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,7,0,1,2]若旋转7次,则可以得到[0,1,2,4,5,6,7]注意,数组[a[0],a[1],a[2],...,a[n-1]]旋转一次的结果......
  • prim求最小生成树
    prim算法建议在kruskal算法及相关证明掌握后进行学习,这里不再赘述。前置知识暂无prim的算法步骤确定一号节点为最小生成树。找到一条由已经属于最小生成树的点集连到还不属于最小生成树的点集的边,使得这条边在这类边中权值最小。令已经属于最小生成树的点集为\(S\),还......
  • Go每日一库之155:go-spew(输出 Go 数据结构)
    对于应用的调试,我们经常会使用fmt.Println来输出关键变量的数据。或者使用log库,将数据以log的形式输出。对于基础数据类型,上面两种方法都可以比较方便地满足需求。对于一些结构体类型数据,通常我们可以先将其序列化后再输出。如果结构体中包含不可序列化的字段,比如func类型......
  • Educational Codeforces Round 155 (Rated for Div
    B.ChipsontheBoard题解:贪心显然我们可以把题意转化为:对于任意一个\((i,j)\),我们可以花费\(a_{i,j}\)的代价占据第\(i\)行和第\(j\)列,求占据所有格子的最小代价考虑两种情况:在每一行选一个格子在每一列选一个格子贪心选即可intn,a[N],b[N];voidsolve......
  • 简单数学函数(最小公倍数与最大公约数与快速幂)
    最大公约数(\(gcd\)):intgcd(inta,intb){returnb?gcd(b,a%b):a;}最小公倍数(\(lcm\)):intlcm(inta,intb){returna/gcd(a,b)*b;//注意:除数为gcd(a,b)}快速幂:template<typenameA,typenameB,typenameC>Cpow(Ax,By,Cp){ if(x==......
  • 解题报告 洛谷P2155 [SDOI2008] 沙拉公主的困惑
    P2155[SDOI2008]沙拉公主的困惑题目题面非常的简洁,求\(\sum\limits_{i=1}^{n!}[i\perpm!]\)直接颓式子,\[\begin{aligned}ans&=\dfrac{n!}{m!}\cdot\varphi(m!)\\\\&=\dfrac{n!}{m!}*m!\prod\limits_{p\midm!}[\dfrac{p-1}{p}]\\&=n!\cdot\dfrac{\......
  • Educational Codeforces Round 155 (Rated for Div. 2)
    Preface这天晚上这场因为不明原因(玩CCLCC中)就没有打,只能赛后补一下这场的EF都不算难初看都有做法,但好家伙E写挂两发,F写个根号做法直接T到天上去了A.Rigged!签到题,对于所有的\(e_i\gee_1\)的\(i\),求出\(S=\maxs_i\),根据\(S+1\)和\(s_1\)的大小关系判断即可#include<cstdio......
  • 加训日记 Day4——挑战edu155,铭记巅峰的一集
    Day4,9.24edu155  ·打满六场新手保护赛之后的第一场(早知道暑假就不打那几场浪费保护了)  ·这场不出意外就是出意外了,库函数用的不熟练,奇奇怪怪的地方爆LL  ·C题赛后10分钟内看了看别人思路补出来了,进入思维误区了属于是  ·打完这场掉了25分捏,我觉得罚时得背大锅,越w......
  • java用Stream一行代码实现数据分组统计、排序、最大值、最小值、平均值、总数、合计
    getAverage():它返回所有接受值的平均值。getCount():它计算所有元素的总数。getMax():它返回最大值。getMin():它返回最小值。getSum():它返回所有元素的总和。示例:@GetMapping("/list")publicvoidlist(){List<InputForm>inputForms=inputFormMapper.se......
  • 离散点 plane to fit (最小二乘)
      usingnamespaceEigen;intreadStreamFile(conststd::string&stream_file,std::vector<std::vector<Eigen::Vector3f>>&cloud_p){std::ifstreaminFile(stream_file,std::ios::in|std::ios::binary);if(!inFile)......