輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。
這個問題從模擬棧的元素的出棧會很好理解——假設給定入棧序列in,出棧序列out。然後需要先知道乙個事實——出棧的元素可以分為兩種:(1)當前的棧頂元素(進棧後又馬上出棧了);(2)曾經的棧頂元素(入棧後沒有馬上出棧)。
而(1)是最關鍵的突破點,因為它先出棧了,它在out序列中的位置必定比其它還沒出棧的元素的前面。
那麼只管按in的順序入棧,直到棧頂元素和出棧序列的首個元素相同為止,此時表示該元素必定是出棧了(因為它在其它所有元素的前面嘛,上面分析過的),pop掉,並且out序列的首部元素往後挪乙個位置。這時在繼續將in序列後續的元素入棧之前,先檢查一下棧裡的元素是否是後續出棧的元素,如果是的話,就將相應的元素出棧;否則就繼續將in序列後續的元素入棧。
// 後續有空再畫張圖,其實**也很容易看懂這個過程~
class solution
++push;
while (!s.empty() && ++pop < len && s.top() == popv[pop])
s.pop();
}return s.empty();
}};
棧的壓入彈出序列
題目 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓棧序列,序列4,5,3,2,1是該棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。解答 可以用乙個輔助的棧來儲存入...
棧的壓入 彈出序列
輸入兩個整數序列,第乙個序列表示棧的壓入順序,判斷兩個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1 2 3 4 5是某棧的壓棧序列,序列4 5 3 2 1是該壓棧序列對應的乙個彈出序列,但4 3 5 1 2就不可能是該壓棧序列的彈出序列。bool ispoporder cons...
棧的壓入彈出序列
1.問題描述 輸入兩個整數序列,第乙個序列表示棧的壓入序列,請判斷第二個序列是否為該棧的彈出序列。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓棧序列,序列4,5,3,2,1是該棧序列對應的乙個彈出序列,但 4,3,5,1,2,就不可能是該壓棧序列的彈出序列。來自 劍指offer...