题目地址: leetcode.com/problems/va…
给定一个入栈序列,再给定另一个序列,问其是否可能是一个合法的出栈序列。题目保证入栈序列数字彼此不同。
思路是直接用一个栈去模拟。先将入栈序列里的数入栈,然后中途如果发现栈顶等于了出栈序列里的值,则不停出栈。看最后操作完之后栈是否为空,若非空则说明序列不是合法的出栈序列。代码如下:
import java.util.ArrayDeque;
import java.util.Deque;
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Deque<Integer> stack = new ArrayDeque<>();
int idx = 0;
for (int i : pushed) {
stack.push(i);
// 一旦发现栈顶可以出栈的时候就立即出栈,同时移动popped的指针
while (!stack.isEmpty() && stack.peek() == popped[idx]) {
stack.pop();
idx++;
}
}
return stack.isEmpty();
}
}
时间复杂度O(n)。
相关链接:
(38条消息) 【Leetcode】946. Validate Stack Sequences_记录算法题解的博客-CSDN博客