序列元素IT面試題 判斷合法出棧序列

2021-09-08 03:43:44 字數 1367 閱讀 5369

本文純屬個人見解,是對前面學習的總結,如有描述不正確的地方還請高手指正~

在技巧筆試口試上,我們常常會碰到這樣一類題型,如給你乙個入棧序列,然後再讓你判斷幾個序列是否有可能為它的出棧序列,如:

入棧序列為 1

2 3 4 5,則

1 2 3 4 5可能為它的出棧序列,而 5 4 1 2 3弗成能為它的

出棧序列。

對於n比較小的情況,我們往往可以通過手動模擬的方法來判斷,對於n比較大的時候,這種方法就顯得效率不佳了。

下面分析一種通用的方法判斷正當出棧序列,時間複雜度為o(n)。為了敘說便利,我們不妨設入棧序列為 1 2 3.......n,並且每乙個元素各不相等。

事實上,乙個出棧序列固定的話,那麼沒個數的出棧順序和時間都是固定的,則我們可以模擬棧的入棧出棧過程,來判斷是否乙個正當的出棧序列。

我們首先設po為目前為止入棧的元素中最大的數,初始化為0,若下乙個出棧元素要大於po的話(設為x),說明我必須將[po+1,x]中的全部書都入棧,再將x彈出便可(這時還應把po賦值為x)。否則說明下乙個出棧的元素已經在棧中,並且肯定是棧頂元素,若棧頂元素與下乙個出棧元素

不相等的話,我們可以判斷這不是乙個正當出棧序列,否則,若全部的出棧元素都不引起衝突,則說明這是乙個正當序列。這裡再說一下時間複雜度,因為我們只有在下乙個出棧元素大於po時,才將元素壓入棧中,並且我們每一次判斷乙個出棧元素是否發生衝突時,都會將棧頂元素彈出,所以每乙個元素都入棧一次,出棧一次,所以時間複雜度為o(n)。

每日一道理

燈,帶有一種明亮的光,每當深夜來臨,是它陪伴著你,如此默默無聞。它是平凡的,外表華麗與否,那都是一樣的,珍珠點綴,水晶加飾的燈它只能用以裝飾,來滿足人們的虛榮心,比起這,普普通通的日光燈是幸運的,因為它照明的本性沒有改變,如同生活中的一部分人平平凡凡卻實實在在。

演算法的具體實現請看**。

**如下:

#include #define maxn 1005

int stack[maxn],top;

int out[maxn];

int check(int n)

if(stack[--top]!=out[i])

return 0;

}return 1;

}int main()

if(check(n))

printf("yes\n");

else

printf("no\n");

return 0;

}

文章結束給大家分享下程式設計師的一些笑話語錄: 3g普不普及現在已經不是看終端了,而是看應用,有好的,便宜實用的應用,花1000多買個能用的智慧型手機應該不是什麼難事。反過來說,你200元拿乙個智慧型手機,沒有好的應用,看個電影要幾十元,也是沒人用3g。

面試題(判斷元素出棧入棧順序的合法性。)

面試題 實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值的操作 的時間複雜度為o 1 面試題 兩個棧實現乙個佇列和兩個佇列實現乙個棧 判斷元素出棧,入棧順序的合法性 如 入棧的序列 1,2,3,4,5 出棧序列為 4,5,3,2,1 是合法序列 入棧的序列 1,2,3,4,5 出...

棧 出棧序列合法判斷 C

題目給定乙個從1開始的連續整數列1 2 3 4 n。將上述數列按順序入棧,中途棧頂元素可以出棧。再給定乙個出棧序列,判斷此序列是否合法。例如,將n設為4。即得到數列1 2 3 4。再給定出棧序列1 3 4 2。可以看出,此齣棧序列合法。過程如下,先將數列1 2 3 4中的元素1入棧,再將其出棧。然後...

判斷出棧序列是否合法

問題描述 對於乙個棧,已知元素的進棧序列,判斷乙個由棧中所有元素組成的排列是否是可能的出棧序列。比如,進棧序列為1 2 3 4,則可能的出棧序列有4 3 2 1,1 4 3 2等。而1 4 2 3就不是。輸入形式 從標準輸入讀取第一行是乙個整數n 3 n 10 代表有n個元素,其進棧序列是1 2 3...