Q22:栈的压入、弹出序列
来源:互联网 发布:用友软件报价单 编辑:程序博客网 时间:2024/06/05 08:17
importjava.util.Stack;
publicclass Q22 {
/**
* 题目:栈的压入、弹出序列
* 题目说明:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
* 测试用例:压栈序列line1为1,2,3,4,5,序列line2:4,5,3,2,1是该栈的一个弹出序列。4,3,5,1,2不是该站的弹出序列。
* 解题思路:分为以下三种情况来处理:
* 1)当前栈顶的元素恰好等于序列line2的元素,则出栈;
* 2)压栈序列已经全部进栈,所有元素都不等于栈顶的元素,则说明该序列不是出栈顺序;返回值为false。
* 3)压栈序列没有全部进栈,则遍历剩余的压栈元素,直到压栈序列中的某个值等于line2中的元素则结束循环。
*/
publicstatic void main(String[] args) {
int[] line1 = {1,2,3,4,5};
int[] line2 = {4,5,3,2,1};
int[]line3 = {4,3,5,1,2};
Q22 test = new Q22();
System.err.println(test.isPopOrder(line1, line2));
}
publicboolean isPopOrder(int[] line1,int[] line2){
//判断两个顺序的合法性
if(line1 ==null || line2 == null){
returnfalse;
}
int point = 0;//用来指向压栈元素的标识
Stack<Integer> stack = new Stack<Integer>();
for(int i = 0; i < line1.length; i++){
if(!stack.isEmpty() && stack.peek() ==line2[i]){//1)栈顶元素等于line2的元素,则出栈
stack.pop();
}else{
if(point == line1.length){//line1中的元素都已遍历完
returnfalse;
}else{//否则,遍历line1中剩余的元素,将其入栈
do {
stack.push(line1[point++]);
} while (point != line1.length && stack.peek() != line2[i]);
if(stack.peek() == line2[i])//如果栈顶元素等于序列line2的元素,则出栈,直到遍历完所有元素。
stack.pop();
else
returnfalse;
}
}
}
returntrue;
}
}
- Q22:栈的压入、弹出序列
- Q22:栈的压入、弹出序列
- 1366栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入和弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 《Java源码分析》:ReadWriteLock(第一部分)
- 让coreseek支持拼音检索
- 《大规模分布式系统架构与设计实战》
- HTML标记参考手册
- 高性能Server---Reactor模型
- Q22:栈的压入、弹出序列
- memcached的设置和获取
- 串口通信
- 线程创建函数pthread_create的pthread_attr_t类型的参数
- py2exe的使用
- HACM2006
- NSMutableArray的strong改成copy就崩溃
- Android通过httpclient传json返回json
- 数组