已知從1到n的數字序列,按順序入棧,每個數字入棧後即可出棧,也可在棧中停留,等待後面的數字入棧出棧後,該數字再出棧,求該數字序列的出棧序列是否合法
比如:3 2 5 4 1 合法序列
3 1 2 4 5 不合法序列
因為1肯定比2先入棧,所以1不可能比2先出棧
思路:為了測試出棧序列是否正確,將元素按順序入棧,進行模擬,如果能夠用棧模擬出出棧次序,說明序列正確
使用棧與佇列模擬入棧、出棧過程
1、出棧結果儲存在佇列order中
2、按元素順序,將元素push進入棧
3、每push乙個元素,即檢查是否與佇列首部元素相同,若相同則彈出佇列首部元素,彈出棧頂元素,直到兩元素不同結束
4、若最終棧為空,說明序列合法,否則不合法
#include
#include
bool
check_is_valid_order
(std::queue<
int>
& order)}if
(!s.
empty()
)return
true
;}
Poj1363 判斷合法棧序列
經發現,如果是三個數的情況下,不合法的順序只有312,也就是乙個數最大第二個數最小的情況下,出棧序列是不合法的,原先我是只比較相連的三個序列,經老師提醒應該是全域性的三個數進行比較。include include include using namespace std const int maxn ...
POJ1363驗證出棧序列問題
此題只需驗證是否為合法的出棧序列。有兩個思路 1 每個已出棧之後的數且小於此數的數都必須按降序排列。複雜度o n 2 適合人腦。2 另乙個思路就是直接模擬入棧出棧過程。雖然模擬毫無技巧可言,但複雜度o n 優於演算法1。適合電腦。如下 for i 0 i n i stack.pop else if ...
POJ 1363 Rails 判斷出棧序列是否合法
題目大意 判斷乙個出棧序列能不能從1,2,3,n 經過棧處理後生成。思路 定理 出棧序列不合法 存在k,滿足i。i,j,k是入站順序,s i s j s k 是出棧順序 如果用這個定理判斷則需要o n 3 的時間,不合適。如果當前棧頂元素是下乙個要出棧元素則讓它出棧。否則把當前元素進棧來看下乙個 當...