栈的压入和弹出序列(剑指Offer)

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

方法:通过一个辅助栈(这里用vector实现),模拟上面的操作,

规律:如果下一个弹出的数字刚好是栈顶元素,那么弹出;如果下一个弹出的数字不是栈顶元素,就把压栈序列中没有入栈的数字压入栈,直到把下一个需要弹出的数字压入栈为止,如果所有的数字都压入栈了仍然没有找到下一个弹出的数字,那么序列不可能是一个弹出序列。

bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        if(pushV.size()==0||pushV.empty()||popV.empty())
            return false;
        vector<int> re;
        //int j=0;
        for(int i=0,j=0;i<pushV.size();)
        {
            re.push_back(pushV[i++]);
            while(j < popV.size()&&re.back()==popV[j])
            {
                  re.pop_back();
                  j++;
            }
        }
       return re.empty();
    }
时间: 2025-01-13 22:18:38

栈的压入和弹出序列(剑指Offer)的相关文章

栈的压入、弹出序列-剑指Offer

栈的压入.弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 思路 需要一个辅助栈 如果下一个弹出栈的数字刚好是栈顶数字,那么直接弹出.若不是,把压栈序列中没有入栈的的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止.若所有数字都压入栈仍然没有找到下一个弹出的

剑指OFFER之栈的压入、弹出序列(九度OJ1366)

题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 输入: 每个测试案例包括3行: 第一行为1个整数n(1<=n<=100000),表示序列的长度. 第二行包含n个整数,表示栈的压入顺序. 第三行包含n个整数,表示栈的弹出顺序. 输出: 对应每个测试案例,如果第二个序列是

数据结构-栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个顺序是否是该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但是4,3,5,1,2就不可能是. 分析:首先利用图像进行形象化的理解.可以发现其压入的顺序并不是所有的一次性压入.同时要考虑栈是否为空.以及其长度.这段代码写的很痛苦,继续训练. /* 剑指offer面试题22 */ #include <iostream> #include &

剑指offer之【栈的压入、弹出序列】

题目: 栈的压入.弹出序列 链接: https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId=13&tqId=11174&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等

剑指offer系列源码-栈的压入、弹出序列

题目1366:栈的压入.弹出序列 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2143解决:816 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 输入: 每个测试案例包括3行: 第一行为1个整数n(1<=n<=100000),表示序列的长度. 第二行包含n个

数据结构和算法之栈和队列二:栈的压入,弹出序列

当时我在学习这个的时候也是非常不理解这个问题,一个栈的压入和弹出序列的判断一看不就知道了么,还去判断干嘛.只要符合后进先出的规则就行.但是我在这里简单说一下这个压入和弹出序列是怎么回事.就是我们给定假设的两个序列,一个为压入序列,一个为弹出序列.然后我们再通过一个辅助的栈,把压入序列的数据一个一个push()进入临时的辅助栈中,如果栈顶元素刚好和弹出序列的数据一样,那么我们就弹出,如果不一样我们就将压入序列的数据继续压入临时栈中,直到到达序列结束.如果压入序列结束,临时栈全部数据弹出那么就是一个

ACM_栈的压入、弹出序列

栈的压入.弹出序列 Time Limit: 2000/1000ms (Java/Others) Problem Description: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) Input: 输入一个T,表示理面输入T组数据.每组数据第一行

算法:栈的压入、弹出序列

/** * @Author liguo * @Description 栈的压入.弹出序列 * @问题: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等. * 例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. * (注意:这两个序列的长度是相等的) * @思路: 借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后

【剑指offer】面试题 31. 栈的压入、弹出序列

面试题 31. 栈的压入.弹出序列 NowCoder LeetCode 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列 1.2.3.4.5 是某栈的压栈序列,序列 4.5.3.2.1 是该压栈序列对应的一个弹出序列,但 4.3.5.1.2 就不可能是该压栈序列的弹出序列. Java 实现 import java.util.Stack; public class Solution { public boolean

包含min函数的栈 + 栈的压入、弹出序列

剑指offer 两道关于 数据结构——栈 的题目 1. 包含min函数的栈 简要分析一下这道题,这道题做了3遍才过,踩了一些小坑 看看示例: 得到了规律,那么关键部分的代码实现,就在于 两个栈(rawStack 和 minStack) 和 push() 方法 Stack<Integer> rawStack = new Stack<>(); Stack<Integer> minStack = new Stack<>(); public void push1(i