【剑指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;
};
相关推荐
未来之窗软件服务5 分钟前
幽冥大陆(八十八 ) 操作系统应用封装技术C#自解压 —东方仙盟练气期
java·前端·c#·软件打包·仙盟创梦ide·东方仙盟·阿雪技术观
技术小泽6 分钟前
java转go速成入门笔记篇(一)
java·笔记·golang
你不是我我6 分钟前
【Java 开发日记】我们来说一下 MySQL 的慢查询日志
android·java·mysql
C雨后彩虹6 分钟前
ReentrantLock入门:核心特性与基本使用
java·数据结构·reentrantlock·lock
资生算法程序员_畅想家_剑魔7 分钟前
Java常见技术分享-27-事务安全-事务日志-事务日志框架
java·开发语言
爪哇部落算法小助手7 分钟前
每日两题day67
c++·算法
你撅嘴真丑11 分钟前
短信计费 和 甲流病人初筛
数据结构·c++·算法
古城小栈11 分钟前
内存对决:rust、go、java、python、nodejs
java·golang·rust
♛识尔如昼♛11 分钟前
C 基础(4) - 字符串和格式化输入输出
c语言·开发语言
予枫的编程笔记14 分钟前
【Java 进阶3】Kafka从入门到实战:全面解析分布式消息队列的核心与应用
java·分布式·kafka