Q:輸入兩個整數(shù)序列,第一個序列表示棧的壓入順序,判斷第二個序列是否為該棧的彈出序列,假設(shè)壓入棧的所有數(shù)字均不相等。
A:如果下一個彈出的數(shù)字剛好是棧頂元素,那么直接彈出,如果下一個彈出的數(shù)字不在棧頂,則把壓棧序列中還沒有入棧的數(shù)字壓入輔助棧,直到把下一個需要彈出的數(shù)字壓入棧頂為止;如果所有數(shù)字都壓入棧后仍然沒有找到下一個彈出的數(shù)字,那么該序列不可能是一個彈出序列。
代碼如下
public static boolean isPopOrder(int[] pushArr,int[] popArr)
{
if (pushArr==null||popArr==null)
{
return false;
}
int len=pushArr.length;
if (len==0||len!=popArr.length)
{
return false;
}
int indexPush=0;
int indexPop=0;
Deque<Integer> stack=new ArrayDeque<>();
while (indexPop<len)
{
while (stack.isEmpty()||stack.peek()!=popArr[indexPop])
{
if (indexPush>=len)
{
return false;
}
stack.push(pushArr[indexPush]);
indexPush++;
}
stack.pop();
indexPop++;
}
return true;
}