• 剑指offer(C++)-JZ31:栈的压入、弹出序列(数据结构-队列 & 栈)


    作者:翟天保Steven
    版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

    题目描述:

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

    1. 0<=pushV.length == popV.length <=1000

    2. -1000<=pushV[i]<=1000

    3. pushV 的所有数字均不相同

    示例1:

    输入:

    [1,2,3,4,5],[4,5,3,2,1]
    

    返回值:

    true
    

    说明:

    可以通过push(1)=>push(2)=>push(3)=>push(4)=>pop()=>push(5)=>pop()=>pop()=>pop()=>pop()
    这样的顺序得到[4,5,3,2,1]这个序列,返回true

    示例2:

    输入:

    [1,2,3,4,5],[4,3,5,1,2]
    

    返回值:

    false
    

    说明:

    由于是[1,2,3,4,5]的压入顺序,[4,3,5,1,2]的弹出顺序,要求4,3,5必须在1,2前压入,且1,2不能弹出,但是这样压入的顺序,1又不能在2之前弹出,所以无法形成的,返回false

    解题思路:

    本题考察数据结构队列 & 栈的使用。

    栈特性:先进后出。

    1.尺寸判断,如果popV的尺寸大,那怎么都不可能复现弹出顺序。

    2.定义一个辅助栈。

    3.模拟入栈操作,当栈为空或者栈顶和popV的数值不一致时,就往里面放pushV的数据,直到栈顶一致。

    4.模拟出栈操作,将栈顶与popV数值一致的数据弹出,进行下次循环;反之,返回false。

    5.i表示弹出的次数,j表示入栈的数组尺寸。

    测试代码:

    1. class Solution {
    2. public:
    3. bool IsPopOrder(vector<int> pushV,vector<int> popV) {
    4. // 尺寸判断
    5. int pushsize = int(pushV.size());
    6. int popsize = int(popV.size());
    7. if(popsize > pushsize)
    8. return false;
    9. // 辅助栈
    10. stack<int> s;
    11. // 入栈下标
    12. int j = 0;
    13. for(int i = 0; i < popV.size() ; ++i)
    14. {
    15. // 入栈:栈为空或者栈顶不等于出栈数组
    16. while(j < pushsize && (s.empty() || s.top() != popV[i]))
    17. {
    18. s.push(pushV[j]);
    19. j++;
    20. }
    21. // 栈顶等于出栈数组
    22. if(s.top() == popV[i])
    23. s.pop();
    24. // 不匹配
    25. else
    26. return false;
    27. }
    28. return true;
    29. }
    30. };


    人生大事真好看!强烈推荐!

    好片不怕糊,这么冷的市场居然16亿了,真不错。

    “天上的每颗星星,都是爱过我们的人呀!”

     

  • 相关阅读:
    【Java基础面试十二】、说一说你对面向对象的理解
    Three 之 three.js (webgl)鼠标/手指通过射线移动物体的简单整理封装
    738. 单调递增的数字
    PHP - 浅谈PHP组件、框架以及Composer
    设计原则之【开闭原则】
    【Python百日进阶-数据分析】Day122 - Plotly Figure参数: 散点图(四)
    在ubuntu安装nvidia驱动 (亲测有效,这是方法二)
    智慧食堂这个技术,有点秀
    【机器学习】数据格式csv/txt/pkl
    通过平台生态系统加速业务创新
  • 原文地址:https://blog.csdn.net/zhaitianbao/article/details/126006985