输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
来源:互联网 发布:配置php开发环境 编辑:程序博客网 时间:2024/05/22 14:15
声明:此为本人的另一篇博客上摘录下来,另一篇博客已删除
例子:
比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。
因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,
这样得到的pop序列就是4、5、3、2、1。
但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。
经过简单的测试正确
代码:
import java.util.LinkedList;
public class Order_Shed {
//思路一
public static boolean judge_is(int[]array1,int[]array2){
if(array1.length==0||array2.length==0||
array1.length!=array2.length)
return false;
int index=0;
LinkedList<Integer> list = new LinkedList<Integer>();
LinkedList<Integer> stack = new LinkedList<Integer>();
for(int i=0;i<array1.length;i++){
if(array1[i]==array2[index]){
list.add(array1[i]);
index++;
while(stack.size()!=0&&stack.get(0)==array2[index]){
list.add(stack.removeFirst());
index++;
}
}else{
stack.addFirst(array1[i]);
}
}
if(stack.size()==0)
return true;
return false;
}
//思路二
public static boolean isPossiPopOrder(int[]array1,int[]array2){
boolean is_possi = false;
if(array1==null||array2==null||
array1.length!=array2.length)
return is_possi;
int index_push = 0;
int index_pop=0;
int length=array1.length;
LinkedList<Integer> list = new LinkedList<Integer>();
while(length>index_pop){
while(list.size()==0||list.getLast()!=array2[index_pop]){
if(index_push>=length)
break;
list.add(array1[index_push]);
index_push++;
}
if(list.getLast()!=array2[index_pop])
break;
list.removeLast();
index_pop++;
}
if(index_pop>=length&&list.size()==0)
is_possi=true;
return is_possi;
}
public static void main(String[] args) {
int[]array1 ={1,2,3,4,5};
int[]array2={4,5,3,2,1};
//测试一
System.out.println(judge_is(array1, array2));
int[]array3 ={4,3,5,1,2};
System.out.println(judge_is(array1, array3));
//测试二
System.out.println(isPossiPopOrder(array1, array2));
System.out.println(isPossiPopOrder(array1, array3));
}
}
结果:
false
true
false
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序
- 题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 【算法】输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 微软算法100道题-------输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 两个整数序列,其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 题目:输入两个整数序列。其中一表示栈的 push 顺序,判断另一个序列有没可能是对应的 pop 顺序
- 每天学习一算法系列(27)(输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序)
- <仅是自己做笔记。。。系列-14>输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 输入两个整数序列。其中一个序列表示栈的push顺序
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- C++字符串学习(三)
- 函数指针的用途
- 聊聊R的优势
- Oralce中delete和delete from
- python 取代字符串中的某项 replace,split, join
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- UVALive2889 Palindrome Numbers(回文数,神级代码....)
- Qt入门可能会遇到的一些问题
- 括号匹配(二)
- Object-c对象和消息传递
- Servlet详解
- MFC-GUI绘图相关摘要
- 阿里云ECS+Gunicorn+Supervisor+Nginx部署Flask
- 2016华为机试题:大数相减