[路飞]_leetcode-946-验证栈序列

简介: leetcode-946-验证栈序列

网络异常,图片无法展示
|


[题目地址][B站地址]


给定 pushedpopped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false


示例 1:


输入: pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出: true
解释: 我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
复制代码


示例 2:


输入: pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出: false
解释: 1 不能在 2 之前弹出。
复制代码


提示:


  • 1 <= pushed.length <= 1000
  • 0 <= pushed[i] <= 1000
  • pushed 的所有元素 互不相同
  • popped.length == pushed.length
  • poppedpushed 的一个排列


本题要我们验证给出的入栈操作序列和出栈操作序列是否是可以匹配的相互操作


所以我们可以模拟整个操作过程,如果所有的入栈操作都可以完成,并且所有的出栈操作也都可以完成,并且栈为空,那就说明给出的入栈操作序列和出栈操作序列是匹配的


具体过程如下:


  1. 创建一个栈来进行后续操作
  2. 遍历入栈操作,将每一个元素入栈
  3. 每次入栈完成后判断栈顶元素是否等于出栈序列第一个元素,如果不等,继续入栈。如果相等,则删除出栈序列的第一个元素,并将栈顶元素弹出,直到栈顶元素不等于出栈序列第一个元素
  4. 重复以上过程,直到所有入栈操作完成
  5. 此时如果栈为空,且出栈序列为空,则说明所有出栈操作都可以完成,且是在最初空栈上进行的,返回 true


否则说明不是,返回 false


整体过程如下:

网络异常,图片无法展示
|

代码如下:


var validateStackSequences = function(pushed, popped) {
  // 创建空栈
  const stack = [];
  // 遍历入栈操作序列
  for(let i = 0;i<pushed.length;i++){
    // 将每一个元素入栈
    stack.push(pushed[i])
    // 当栈不为空且栈顶元素等于出栈操作序列的第一个元素时
    while(stack.length && stack[stack.length-1]===popped[0]){
      // 栈顶元素弹出
      stack.pop();
      // 出栈操作序列第一个元素删除
      popped.shift();
    }
  }
  // 如果栈为空且出栈序列为空,则说明两个操作序列是在空栈基础上匹配的操作序列
  return stack.length===0 && popped.length===0
};
复制代码


至此我们就完成了 leetcode-946-验证栈序列


如有任何问题或建议,欢迎留言讨论!

相关文章
|
5月前
|
Python
【Leetcode刷题Python】376. 摆动序列
文章提供了解决LeetCode "摆动序列" 问题的Python实现代码,通过遍历整数数组并使用两个变量 down 和 up 来记录正差和负差摆动序列的长度,最终返回最长摆动子序列的长度。
45 0
|
6月前
|
存储 算法 测试技术
力扣经典150题第五十四题:最小栈
力扣经典150题第五十四题:最小栈
46 0
|
7月前
|
存储 算法 索引
力扣每日一题 6/24 模拟 数组 单调栈
力扣每日一题 6/24 模拟 数组 单调栈
45 0
|
3月前
【LeetCode 40】98.验证二叉搜索树
【LeetCode 40】98.验证二叉搜索树
18 0
|
3月前
【LeetCode 24】225.用队列实现栈
【LeetCode 24】225.用队列实现栈
17 0
|
3月前
|
算法
【LeetCode 23】232.用栈实现队列
【LeetCode 23】232.用栈实现队列
26 0
|
5月前
|
Python
【Leetcode刷题Python】946. 验证栈序列
LeetCode题目“946. 验证栈序列”的Python解决方案,通过模拟栈的压入和弹出操作来验证给定的两个序列是否能通过合法的栈操作得到。
37 6
|
5月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
36 4
|
5月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
28 3
|
5月前
|
Python
【Leetcode刷题Python】105. 从前序与中序遍历序列构造二叉树
LeetCode上105号问题"从前序与中序遍历序列构造二叉树"的Python实现,通过递归方法根据前序和中序遍历序列重建二叉树。
34 3