Sword31——栈的压入、弹出序列

该博客介绍了一种方法来验证给定的压栈和弹栈顺序是否合法。通过模拟栈的操作,当所有元素按压入顺序压入栈后,如果能按照弹出顺序依次弹出,则证明序列是可行的。核心是使用一个循环,在压栈的同时检查栈顶元素是否与弹出顺序匹配,匹配则弹出并更新下标,直到栈为空,表示序列合法。
摘要由CSDN通过智能技术生成

Sword31——栈的压入、弹出序列

方法1——模拟

  • 思路:按照给定的入栈顺序和弹出顺序进行,最后栈中若无元素,则证明为可行
  • 特殊情况与临界分析:无,因为pushed和popped长度相等,当二者均为空时也是可行
  • 终止条件:栈为空即代表可行
  • 步骤:
    • 定义一个栈
    • 定义弹出顺序数组的下标
    • foreach循环入栈顺序数组
      • 将当前元素压入栈中
      • 循环条件:栈非空,且栈顶元素等于弹出顺序数组中下标对应的元素
      • while循环
        • 弹出栈顶元素
        • 弹出顺序数组下标后移
    • 判断此时栈是否为空,为空则可行,否则不可行
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        // 定义一个栈
        Deque<Integer> stack = new LinkedList<>();
        // 定义弹出顺序数组的下标
        int index = 0;
        // foreach循环
        for (int num : pushed) {
            // 将当前元素入栈
            stack.push(num);
            // 当栈顶元素等于弹出顺序数组中下标对应元素时
            while (!stack.isEmpty() && stack.peek() == popped[index]) {
                // 弹出栈顶元素
                stack.pop();
                // 下标后移
                index++;
            }
        }
        // 判断此时栈是否为空
        return stack.isEmpty();
    }

方法1——模拟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值