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

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;
    }
};

全部评论

相关推荐

前段时间投boss,实在没绷住,就发出来吧
测开小登的自我救赎:这种就别较真了,感觉应该是那种吃上了学历贬值的时代红利感觉自己也能找一堆92硕士的边角料小公司吧
点赞 评论 收藏
分享
LZStarV:冲就好了,就算真的是字节也冲,面评脏了大不了等三四个月就淡了,而且等到那个时候实力进步了选择还多,何必拘泥于字节
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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