目录
题目地址:
相同题型:
我们直接看题解吧:
解题方法:
审题目+事例+提示:
解题分析:
解题思路:
代码实现:
题目地址:
946. 验证栈序列 - 力扣(LeetCode)
难度:中等
今天刷验证栈序列(栈压入、弹出序列),大家有兴趣可以点上看看题目要求,试着做一下。
相同题型:
建议可以先做做这道题
图书整理II(两个栈实现队列)-CSDN博客
题目:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。
我们直接看题解吧:
解题方法:
方法1模拟栈(利用两个序列、数组实现栈)
审题目+事例+提示:
解题分析:
因为两个数组是等长的,并且里面的元素都不重复,所以可以用循环进行遍历。
初始化一个栈,将pushed数组中的元素依次加入到栈中,每加入一个元素,就判断栈是否为空 并且 这个元素的值是否与popped数组中的当前元素相等,如果相等则移除栈,如果不相等则继续添加元素。直到遍历完pushed数组,并且比较完popped数组中的元素。
此时如果栈为null,则表示popped数组为pushed数组的弹出序列,返回true,否则返回false
解题思路:
代码实现:
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Deque<Integer> stack = new ArrayDeque<Integer>(); // 创建一个栈对象
int n = pushed.length; // 获取pushed数组的长度
for (int i = 0, j = 0; i < n; i++) { // 遍历pushed数组
stack.push(pushed[i]); // 将pushed数组的元素压入栈中
// 当栈不为空 且 栈顶元素等于popped数组的当前元素时
while (!stack.isEmpty() && stack.peek() == popped[j]) {
stack.pop(); // 弹出栈顶元素
j++; // 将j加1,表示已经匹配到了popped数组的下一个元素
}
}
return stack.isEmpty(); // 判断栈是否为空
}
}