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

栈的压入、弹出序列

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

import java.util.*;

public class Solution {
    public boolean IsPopOrder(int [] pushA,int [] popA) {
        Deque<Integer> s1 = new ArrayDeque<>();
        // 往 s1 入栈,中间可能存在部分先出栈,再继续入栈的情况
        int j = 0;
        for(int x : pushA){
            s1.push(x);
            // 1. 中途开始出栈;
            // 2. 最后,将pushA压完后,还会进while里尝试能不能将 s1 继续出栈
            while(!s1.isEmpty() && s1.peek().equals(popA[j])) {
                s1.poll();
                j++;
            }
        }
        // 执行到这里有两种情况:
        // 1. s1 已经在上面的while里变成空栈了;
        // 2. 输入的出入栈序列不匹配,s1 还没清空就退出while了
        return s1.isEmpty();
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务