题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pushV int整型一维数组 * @param popV int整型一维数组 * @return bool布尔型 */ function IsPopOrder(pushV, popV) { let stack = []; let popIndex = 0; // 弹出序列的指针 for (let i = 0; i < pushV.length; i++) { stack.push(pushV[i]); // 将当前元素压入辅助栈 // 检查栈顶元素是否与弹出序列当前元素相同 while (stack.length > 0 && stack[stack.length - 1] === popV[popIndex]) { stack.pop(); // 弹出栈顶元素 popIndex++; // 弹出序列指针后移 } } // 如果辅助栈为空,说明弹出序列是合法的 return stack.length === 0; } module.exports = { IsPopOrder: IsPopOrder, };
pushV
,每次将元素压入栈。popV
中的当前元素相同。如果相同,就弹出栈顶,并继续检查下一个元素。popV
是 pushV
的一个合法弹出序列。