题解946: 验证栈序列
给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。
示例:
输入: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
题意解读:
- 根据示例可以更加明确的理解题意,对一个
pushed序列进行push和pop的合适操作,能够得到对应的poped序列,即表明能够匹配验证的合理性 pushed首先执行的应当是push操作,(条件为非等于poped的首个元素)当push的当前值和poped的首个元素相等时,则对pushed进行pop操作,将当前push进去的元素pop出来,接着push下一个元素,依次循环判断是否等于poped的下一个元素,同上循环执行即可- 最后
push和pop的最终结果,pushed序列应当为空,说明序列能够被验证
代码搞起:
var validateStackSequences = function (pushed, popped) {
//不能直接对pushed序列进行操作=》创建新的数组,用作栈形式进行数据存储
let stack = [];
//需要指引,定义即可
let cur = 0;
for (let item of pushed) {//array具有iterator迭代器对象可使用for……of进行元素值的遍历
//循环pushed序列中的每一个值,将其push到stack里
stack.push(item);
//进行循环判断,当前push进去的元素是否等于poped的首个元素(需要一个指引 cur)
//数组首个下标为0开始,所以最后一个也就是push进去的当前项下标应当是length-1
while (stack.length && stack[stack.length-1] === popped[cur]) {
//当当前值相等时,将其pop出来
stack.pop();
//poped首个元素已经比对过,接下来比对下一个元素,cur++操作
cur++;
}
}
//如若序列能够通过验证,stack内的元素应当全部被pop出来,length也就等于0
return !stack.length;
};
①首要重点,能够理清题意,真正明白题之所表达的意图;②参数按需定义,不要提前设想;③下标和长度之间的关系要明晰
👆 👆 以上就是个人对【验证栈序列】的代码解法和方法解读。
所思即所想,思路即套路,一键三连哟!!!