一、题目
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。
例如序列 1, 2, 3, 4, 5 是某栈的压入顺序,序列 4, 5, 3, 2, 1 是该压栈序列对应的一个弹出序列,但 4, 3, 5, 1, 2 就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
二、分析及代码
1. 辅助栈
(1)思路
设计一个辅助栈,依次压入元素,并根据弹出序列进行对应操作,从而实现判断。
(2)代码
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public boolean IsPopOrder(int [] pushA, int [] popA) {
if (pushA == null)
return true;
Stack<Integer> sta = new Stack<>();
int i = 0;
for (int num : pushA) {
sta.push(num);
while (!sta.empty() && i < popA.length && sta.peek() == popA[i]) {
sta.pop();
i++;
}
}
return sta.empty();
}
}
(3)结果
运行时间:20ms,占用内存:9284k。
三、其他
暂无。