给定 pushed
和 popped
两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true
;否则,返回 false
。
示例 1:
输入: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
示例 2:
输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2] 输出:false 解释:1 不能在 2 之前弹出。
提示:
1 <= pushed.length <= 1000
0 <= pushed[i] <= 1000
pushed
的所有元素 互不相同popped.length == pushed.length
popped
是 pushed
的一个排列这道题是关于栈的基础题,相信大家在学习的时候都有接触过了,今天刚好做到了,就拎出来讲一讲。
首先,我们遍历 pushed 序列,依次将元素推入栈中;同时,我们要维护一个指针 i 指向 popped 序列。
i 的作用就是检测 popped 序列的元素 i 是否与 popped[i] 相等,如果相等,则将栈顶元素弹出并将指针 i 向后移动一位。
最终,若指针 i 指向了 popped 序列的末尾,则说明 pushed 和 popped 序列符合题意,返回 true;否则返回 false。
- class Solution {
- public boolean validateStackSequences(int[] pushed, int[] popped) {
- Stack<Integer> st = new Stack<>();
- int i = 0;
- int n = popped.length;
- for(int x : pushed){
- st.push(x);
- while(!st.isEmpty() && st.peek() == popped[i]){
- st.pop();
- i++;
- }
- }
- return i == n;
- }
- }
以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!