栈——OJ题

📘北尘_个人主页
🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》

☀️走在路上,不忘来时的初心

文章目录


一、最小栈

1、题目讲解

2、思路讲解

3、代码实现

cpp 复制代码
class MinStack {
public:
    MinStack() {}
    
    void push(int val) {
        st.push(val);
        if(minst.empty() || st.top()<=minst.top())
        {
            minst.push(val);
        }
    }
    
    void pop() {
        if(st.top()==minst.top())  
        {
             minst.pop();
        }
       
        st.pop();


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

    }
    stack<int> st;
    stack<int> minst;
};

二、栈的压入、弹出序列

1、题目讲解

2、思路讲解

3、代码实现

cpp 复制代码
bool IsPopOrder(vector<int>& pushV, vector<int>& popV) 
    {
        stack<int> s;
        int pushi=0,popi=0;
        for(auto ch:pushV)
        {
            s.push(pushV[pushi]);
            pushi++;
            while(!s.empty() && s.top()==popV[popi])
            {
                s.pop();
                popi++;
            }
        }
        return s.empty();
    }

三、逆波兰表达式求值

1、题目讲解

2、思路讲解

3、代码实现

cpp 复制代码
class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> s;
        for(auto& ch:tokens)
        {
            if(ch=="+" || ch=="-" || ch=="*" || ch=="/" )
            {
                int right=s.top();
                s.pop();
                int left=s.top();
                s.pop();
                switch(ch[0])
                {
                    case '+':
                    s.push(left+right);
                    break;

                    case '-':
                    s.push(left-right);
                    break;

                    case '*':
                   s.push(left*right);
                    break;

                    case '/':
                   s.push(left/right);
                    break;  
                }
            }
            else
            {
                s.push(stoi(ch));
            }
        }

        return s.top();

    }
};

相关推荐
Q741_14724 分钟前
C++ 前缀和 高频笔试考点 实用技巧 牛客 DP34 [模板] 前缀和 题解 每日一题
开发语言·c++·算法·前缀和·牛客网
RTC老炮1 小时前
webrtc弱网-LossBasedBandwidthEstimation类源码分析与算法原理
网络·算法·webrtc
豆浩宇2 小时前
Conda环境隔离和PyCharm配置,完美同时运行PaddlePaddle和PyTorch
人工智能·pytorch·算法·计算机视觉·pycharm·conda·paddlepaddle
一只鱼^_2 小时前
牛客周赛 Round 108
数据结构·c++·算法·动态规划·图论·广度优先·推荐算法
小刘的AI小站3 小时前
leetcode hot100 二叉搜索树
算法·leetcode
自信的小螺丝钉3 小时前
Leetcode 876. 链表的中间结点 快慢指针
算法·leetcode·链表·指针
红豆怪怪3 小时前
[LeetCode 热题 100] 32. 最长有效括号
数据结构·python·算法·leetcode·动态规划·代理模式
愚润求学3 小时前
【贪心算法】day6
c++·算法·leetcode·贪心算法
AI 嗯啦3 小时前
计算机的排序方法
数据结构·算法·排序算法
l12345sy3 小时前
Day23_【机器学习—聚类算法—K-Means聚类 及评估指标SSE、SC、CH】
算法·机器学习·kmeans·聚类·sse·sc·ch