题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
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 的一个合法弹出序列。
