验证栈序列(栈压入、弹出序列),剑指offer,力扣

目录

题目地址:

相同题型:

我们直接看题解吧:

解题方法:

审题目+事例+提示:

解题分析:

解题思路:

代码实现:


题目地址:

946. 验证栈序列 - 力扣(LeetCode)

难度:中等

今天刷验证栈序列(栈压入、弹出序列),大家有兴趣可以点上看看题目要求,试着做一下

相同题型:

建议可以先做做这道题

图书整理II(两个栈实现队列)-CSDN博客

题目:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。

我们直接看题解吧:

解题方法:

方法1模拟栈(利用两个序列、数组实现栈)

审题目+事例+提示:

解题分析:

 因为两个数组是等长的,并且里面的元素都不重复,所以可以用循环进行遍历。

初始化一个栈,将pushed数组中的元素依次加入到栈中,每加入一个元素,就判断栈是否为空 并且 这个元素的值是否与popped数组中的当前元素相等,如果相等则移除栈,如果不相等则继续添加元素。直到遍历完pushed数组,并且比较完popped数组中的元素。

此时如果栈为null,则表示popped数组为pushed数组的弹出序列,返回true,否则返回false
 

解题思路:

代码实现:

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        Deque<Integer> stack = new ArrayDeque<Integer>(); // 创建一个栈对象
        int n = pushed.length; // 获取pushed数组的长度
        for (int i = 0, j = 0; i < n; i++) { // 遍历pushed数组
            stack.push(pushed[i]); // 将pushed数组的元素压入栈中
            // 当栈不为空  且 栈顶元素等于popped数组的当前元素时
           while (!stack.isEmpty() && stack.peek() == popped[j]) { 
                stack.pop(); // 弹出栈顶元素
                j++; // 将j加1,表示已经匹配到了popped数组的下一个元素
            }
        }
        return stack.isEmpty(); // 判断栈是否为空
    }
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值