题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序,假设压入栈的所有数字不相等,且压入序列和弹出序列的长度相等。
通过ArrayList类来模拟堆栈工作原理,其中ArrayList类的常用方法如下:
返回值类型 | 方法 |
---|---|
boolean | add(E e):将指定元素添加到集合的尾部 |
E | remove(int index ):移除此集合中指定位置上元素,并返回被删除的元素 |
E | get(E e):获取此集合中指定位置上的元素,并返回获取的元素 |
int | size():返回集合中的元素数 |
boolean | contains(Object obj):判断集合中是否包含指定元素 |
E | set(int index,String element):把集合中指定位置上的元素改为新元素 |
Java代码如下:
import java.util.ArrayList;
public class Solution
{
public boolean IsPopOrder(int [] pushA,int [] popA)
{
boolean isPopOrder = false;
if(pushA != null && popA != null)
{
int length = pushA.length;//(注意:这两个序列的长度是相等的)
int pushIndex = 0;
int popIndex = 0;
ArrayList<Integer> al = new ArrayList<Integer>();//辅助栈
while(popIndex < length)
{
//向辅助栈中添加元素(当辅助栈中没有元素时,)
while(al.size() == 0 || al.get(al.size() - 1) != popA[popIndex])//返回此集合中指定位置上的元素,并返回获取的元素。
{
if(pushIndex == length)
break;
al.add(pushA[pushIndex]);
pushIndex++;
}
if(al.get(al.size() - 1) != popA[popIndex])
break;
//弹出辅助栈顶部的元素(当辅助栈顶部的元素和弹出序列中下一个需要弹出的数字相等时)
al.remove(al.size() - 1);//移除此集合中指定位置上的元素,并返回被删除的元素。
popIndex++;
}
if(al.size() == 0 && popIndex == length)
isPopOrder = true;
}
return isPopOrder;
}
}