題目描述
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)
思路判斷規律:[建立乙個輔助棧(用於實操入棧出棧過程,按照給定入棧序列的順序將元素壓入輔助棧,並且不斷從 輔助棧的棧頂 去找 出棧序列中下乙個希望被彈出的數字]
1.如果下乙個被希望彈出的數字剛好位於棧頂,則直接彈出
2.如果下乙個被希望彈出的數字不在棧頂,則把壓棧序列中還沒有入棧的數字壓入輔助棧,直至下乙個被希望彈出的數字位於棧頂
3.如果所有數字都已入棧但仍未找到下乙個被希望彈出的數字,則該序列不可能是乙個彈出序列
**
class
solution
//入棧序列已全部壓入輔助棧完畢 或 此時輔助棧頂元素 等於 出棧序列中當前元素
//判斷是否為 入棧序列已全部入輔助棧但仍未找到出棧序列當前元素 的情況
if(stack_data.
top()!=
*pnextpop)
break
;//在輔助棧頂找到了出棧序列當前元素,則找出棧下一元素
stack_data.
pop();
++pnextpop;
}//已遍歷完出棧序列 或 未遍歷完出棧序列但入棧序列已全部入輔助棧卻仍未找到出棧序列當前元素
if(stack_data.
empty()
) isorder =
true;}
return isorder;}}
;
(劍指Offer)面試題31 棧的壓入 彈出序列
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。構建乙個輔助棧,按順序訪問彈出棧序列...
劍指Offer面試題31 棧的壓入 彈出序列
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 ...
劍指offer 面試題31 棧的壓入 彈出序列
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如,序列 是某棧的壓棧序列,序列 是該壓棧序列對應的乙個彈出序列,但 就不可能是該壓棧序列的彈出序列。示例 1 輸入 pushed 1,2,3,4,5 popped 4,5,3,2,1...