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

题目链接:https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/

两种操作:(二者只能有一个执行)
1)将下一个数加入栈中;
2)将当前栈顶元素弹出;

  1. 判断当前栈顶元素与下一个要输出的数是否一样:
    一样,将栈顶元素弹出;不同,将输入序列中下一个数入栈。
  2. 遍历完,如果栈空,说明出栈顺序正确;
    时间复杂度:O(N)
    空间复杂度:O(N)
class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        if(pushed.size() != popped.size()) return false;
        int n = pushed.size();
        stack<int> st;
        int j = 0;
        for(int i = 0; i < n; i++)
        {
            //将元素入栈
            st.push(pushed[i]);
            //判断当前栈顶元素与下一个要出栈的数是否一样  一样=====>出栈
            while(!st.empty() && st.top() == popped[j]) st.pop(), j++;
        }
        return st.empty();
    }
};
posted @ 2020-03-29 12:27  NaughtyCoder  阅读(79)  评论(0)    收藏  举报