JZ31 栈的压入、弹出序列 #栈# #模拟栈#

栈的压入、弹出序列

https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId=13&tqId=23290&ru=/exam/oj/ta&qru=/ta/coding-interviews/question-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D13%26type%3D13

解题思路:

  • 我们不妨建立一个栈模拟弹栈的过程,如果能得到给定的弹栈序列,返回true;否则返回false;
  • 每压入一个元素都要和弹出序列做比较,如果匹配成功就连续比较出栈,直到匹配失败:
    1. 如果pushV中的数据没压完,就压入新元素,再次匹配。
    2. 如果pushV中的数据压完了,但是栈中的数据没弹完(或是popV没匹配完),则说明无法得出给定的弹出序列。

题解:

class Solution {
  public:
    bool IsPopOrder(vector<int> pushV, vector<int> popV) {
        stack<int> st;
        size_t popi = 0;
        for (auto e : pushV) {
            st.push(e);
            //出栈序列匹配后要连续比较,出栈;可能会有多个匹配
            while (!st.empty() && st.top() == popV[popi]) {
                st.pop();
                ++popi;
            }
        }
        return popi == popV.size();
        // return st.empty();
    }
};

分类标签:#栈# #模拟栈#

全部评论

相关推荐

11-04 10:30
已编辑
门头沟学院 研发工程师
开心小狗🐶:“直接说答案”
点赞 评论 收藏
分享
陌夏微秋:一线城市25w左右吧,17×15=255
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务