【剑指offr--C/C++】JZ31 栈的压入、弹出序列

一、题目

二、思路及代码

借助一个辅助栈来模拟入栈过程,

①在入栈之前先判断当前要入栈的元素是否与出栈数组当前元素相同,

② 如果不相同就入栈;

③如果相同就不用入栈了(不入栈=出栈),然后再依次取出栈的栈顶元素看是否与出栈数组当前值相同,相同的话就依次出栈,知道不再相等或者全部出栈;

④若入栈元素还没有遍历完,就继续重复前三个步骤

cpp 复制代码
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pushV int整型vector 
     * @param popV int整型vector 
     * @return bool布尔型
     */
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
        // write code here
        int i=0;
        int j=0;
        for(i,j;i<pushV.size(),j<popV.size();){
            //相同就不入栈
            if(pushV[i]==popV[j]){
                
                j++;
                //遍历栈顶元素,若与出栈元素相同就出栈
                while(j<popV.size()&&!st.empty() && st.top()==popV[j]){
                    j++;
                    st.pop();
                }
            }else{
                //不相同就入栈
                st.push(pushV[i]);
                
            }
            //每处理完一个入栈数组元素就+1
            i++;
        }
        if(st.empty()) return true;
        return false;

    }

    private:
    stack<int>st;
};
相关推荐
卓怡学长13 分钟前
w204基于springbo旅行社签证代理服务系统
java·spring boot·spring·intellij-idea
泡海椒15 分钟前
趋势分析报表:jquick-pdf折线图PDF生成实战
java·大数据·运维·服务器·前端·pdf
Json____23 分钟前
家居装修 AI 智能咨询助手:让装修咨询从“大海捞针“变成“一问即答“
java·后端·vue3·it学习·wwwoop.com
繁华的地方不一定留下你的脚印24 分钟前
C++ std::variant 与 std::visit:安全保存多种类型,写清每个处理分支
开发语言·c++
vipxieliang29 分钟前
ValidX 在微服务架构中的验证策略
java·spring boot
用户0942485680329 分钟前
第18章:ConcurrentHashMap与并发容器实战
java·jvm
小羊没烦恼!40 分钟前
在Scrum中实施敏捷建模
java·开发语言·windows·算法·c#
❀͜͡傀儡师43 分钟前
20 年沉淀,CAS 8.0 重新定义企业级 SSO:适配 JDK 25 与 Spring Boot 4.1
java·开发语言·spring boot
程序员老陆44 分钟前
WIN32_LEAN_AND_MEAN:Windows 头文件里的“精简编译开关”
c++·windows
牧瀬クリスだ1 小时前
Spring统一功能处理
java·spring boot·spring·状态模式