剑指offer打卡Day18 栈的压入、弹出序列(重新学习 Vector 与 Stack)
发布日期:2021-04-30 21:03:09 浏览次数:146 分类:精选文章

本文共 899 字,大约阅读时间需要 2 分钟。

为了判断给定的弹出序列是否可能是某个栈的弹出顺序,我们可以模拟栈的压入和弹出过程,并检查弹出顺序是否符合栈的特性(即先进后出,FILO)。

方法思路

  • 压入元素:将压入顺序中的所有元素依次压入辅助栈中。
  • 模拟弹出过程:逐个从栈顶弹出元素,并检查弹出序列中的当前元素是否与弹出的元素匹配。
  • 检查匹配:如果当前弹出元素与弹出序列中的当前元素不一致,则返回false。
  • 返回结果:如果所有弹出元素都能正确匹配且栈已为空,返回true;否则返回false。
  • 解决代码

    public boolean isPopOrder(int[] pushA, int[] popA) {    if (pushA.length != popA.length) return false;    Stack
    stack = new Stack<>(); for (int num : pushA) { stack.push(num); } int pointer = 0; while (!stack.isEmpty() && pointer < popA.length) { int top = stack.pop(); if (top == popA[pointer]) { pointer++; } else { return false; } } return pointer == popA.length;}

    代码解释

  • 初始检查:首先检查压入和弹出序列的长度是否相等,如果不相等直接返回false。
  • 创建辅助栈:使用Stack类创建辅助栈,依次压入压入顺序中的元素。
  • 弹出并检查:逐个从栈顶弹出元素,检查是否与弹出序列中的当前元素匹配。如果匹配,继续检查下一个元素;否则返回false。
  • 最终检查:当所有元素都按顺序匹配且栈为空时,返回true;否则返回false。
  • 这种方法确保了弹出序列严格按照栈的规则进行,能够正确判断弹出顺序的合法性。

    上一篇:多线程下实现自增的几种方式
    下一篇:该如何高效实用Kotlin?看这一篇就够了!

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2026年06月12日 23时38分47秒