题目地址: http://poj.org/problem?id=1363
此题只需验证是否为合法的出栈序列。
有两个思路:
1、每个已出栈之后的数且小于此数的数都必须按降序排列。复杂度O(n^2),适合人脑。
2、另一个思路就是直接模拟入栈出栈过程。虽然模拟毫无技巧可言,但复杂度O(n),优于算法1。适合电脑。
代码如下:
for(i = 0; i < N; i++){
if(index < data[i]){
while(index < data[i]){
stack.push(++index);
}
stack.pop();
} else if(stack != null && stack.peek().equals(new Integer(data[i]))){
stack.pop();
} else {
flag = "No";
break;
}
}
题目只用于验证,倒不难,不过我想问如果让求出所有合法的出栈序列该怎么求????有高效的算法吗?