题解 | 栈的压入、弹出序列

class Solution {
public:
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
        // write code here
        int n = pushV.size();
        stack<int> s;
        int j = 0;//j为输入数组的下标
        int i = 0;//i为输出数组的下标
        while(j<n){//输入数组全部输入为止
            if(j<n && (s.empty() || s.top()!=popV[i])){
            //未全部输入且栈顶元素与弹出元素不一致,则压入
                s.push(pushV[j]);
                j++;
            }
            else{//if条件中,j<n一定为真,则else代表s不为空且s.top() ==popV[i]  
			  	s.pop();
              	i++;
            }
        }
        while(s.top()==popV[i]){//对照剩余元素直到出现不同元素或栈空
            s.pop();
            i++;
            if(s.empty())
                break;
        }
        if(s.empty()){
            return true;
        }
        return false;
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务