LeetCode--[946. 验证栈序列]----Javascript

91 阅读1分钟

946. 验证栈序列

难度--中等

给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 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
  • popped 是 pushed 的一个排列

题解

本题为模拟题,只要模拟进栈出栈的过程即可得出答案

/**
 * @param {number[]} pushed
 * @param {number[]} popped
 * @return {boolean}
 */
 var validateStackSequences = function(pushed, popped) {
  let stack = []
  for(let i in pushed){
    /* 如果不是要出栈的元素则进栈 */
    if (pushed[i]!=popped[0]) {
      stack.push(pushed[i]);
    }
    /* 如果是要出栈的元素则出栈 */
    else {
      popped.shift();
      /* 判断栈顶元素是否要出栈 */
      while (stack.length&&stack[stack.length-1]==popped[0]) {
          popped.shift();
          stack.pop();
      }
    }
  }
  /* 如果最后栈的元素为空且要出栈的元素均出栈,结果则为 true */
  return !(stack.length||popped.length);
};