poj 1363 判斷棧序列是否合法

2021-10-01 14:01:58 字數 594 閱讀 2493

已知從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 的時間,不合適。如果當前棧頂元素是下乙個要出棧元素則讓它出棧。否則把當前元素進棧來看下乙個 當...