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

栈的压入、弹出序列

http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106

刚开始代码写的很不简洁,超时了,举例子也都能过,如下:

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        stack<int> s;
        if(pushV.size()!=popV.size()) return false;
        if(pushV.size()==0||popV.size()==0) return true;
        int j=0;
        for(int i=0;i<popV.size();i++){
            if(s.top()==popV[i]){
                s.pop();
                j++;
                continue;
            }
            for(;j<pushV.size();j++){
                s.push(pushV[j]);
                if(pushV[j]==popV[i]) break;
            }
            if(s.top()==popV[i]){
                s.pop();
                j++;
                continue;

            }
            if(j==pushV.size()&&i!=popV.size()) return false;

        }
        return true;
    }
};

后来参考题解,发现可以简化很多,使用while也很省力

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        stack<int> s;
        int i=0,j=0;
        while(i<pushV.size()){
            if(pushV[i]!=popV[j]) s.push(pushV[i++]);
            else{
                i++;j++;
                while(!s.empty()&&s.top()==popV[j]){
                    s.pop();
                    j++;
                }
            }
        }
        return s.empty();
    }
};
全部评论

相关推荐

Aaso:挺好的,早挂早超生
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务