栈的压入弹出序列

Q:输入两个整数序列,第一个序列表示栈的压入顺序,判断第二个序列是否为该栈的弹出序列,假设压入栈的所有数字均不相等。
A:如果下一个弹出的数字刚好是栈顶元素,那么直接弹出,如果下一个弹出的数字不在栈顶,则把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止;如果所有数字都压入栈后仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。
代码如下

    public static boolean isPopOrder(int[] pushArr,int[] popArr)
    {
        if (pushArr==null||popArr==null)
        {
            return false;
        }
        int len=pushArr.length;
        if (len==0||len!=popArr.length)
        {
            return false;
        }
        int indexPush=0;
        int indexPop=0;
        Deque<Integer> stack=new ArrayDeque<>();
        while (indexPop<len)
        {
            while (stack.isEmpty()||stack.peek()!=popArr[indexPop])
            {
                if (indexPush>=len)
                {
                    return false;
                }
                stack.push(pushArr[indexPush]);
                indexPush++;
            }
            stack.pop();
            indexPop++;
        }
        return true;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。...
    鸿雁长飞光不度阅读 734评论 0 0
  • 栈的压入、弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。...
    echoVic阅读 532评论 0 1
  • 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字...
    _minimal阅读 1,236评论 2 0
  • 需求 - 希望回到家还可以写代码 - 紧急Bug,需要修复并发布,回公司加班太麻烦 Git远程仓库的选择 - Gi...
    Sanchain阅读 635评论 0 0
  • 工作之余养几株吊兰,置于阳台边,每天迎着阳光生长,便悄然开出了几朵小花。 绽放的小白花朵和新长的嫩叶,犹如春天一般...
    风清_日丽阅读 289评论 0 1