滴滴2018 10 10筆試 火車編組題

2021-08-28 22:16:09 字數 1832 閱讀 2372

原題不放了。其實就是考已知入棧序列為1,2,3,4,n=4,問輸入的出棧序列是否合理(合理輸入yes,不合理輸出no)。

輸入:41

32輸出:

noinv為索引,指向入棧序列。outv為索引,指向出棧序列。

新建乙個棧stack來模擬出棧過程,如果合理,那麼stack的出棧過程會與出棧序列依次匹配。

考慮出棧序列合理,那麼如果當前inv指向的元素與outv指向的元素不一樣,那麼就將當前inv指向的元素入棧stack,inv++;如果當前inv指向的元素與outv指向的元素一樣,那麼就出棧stack,outv++。

考慮出棧序列不合理,那麼inv就會 >= n。

以如上實際例子為例,當前stack已經入棧4321了,判斷棧頂與出棧序列當前所指元素是否相等,當前相等,則進入if,stack出棧,即成功模擬了出棧序列當前所指元素的出棧,然後出棧序列索引後移。

判斷棧頂與出棧序列當前所指元素是否相等,當前不相等,則進 入else,將入棧序列當前所指元素入棧stack,即成功模擬了入棧序列當前所指元素的入棧,然後入棧序列索引後移。

判斷棧頂與出棧序列當前所指元素是否相等,當前相等,則進入if,stack出棧,即成功模擬了出棧序列當前所指元素的出棧,然後出棧序列索引後移。

判斷棧頂與出棧序列當前所指元素是否相等,當前不相等,則進 入else,但入棧序列的索引指向了乙個不存在的元素,因為所有元素都已經入棧,所以不應該再有元素可以入棧了。這時就說明了出棧序列是不合理的。

outli =

for i in

range(4

):eval

(input()

))n =len

(outli)

inputli =

[i for i in

range(1

,n+1)]

defsolve

(n,inputli,outli)

: stack =

1)outv =

0#指向未被掃瞄的出棧序列的元素

inv =

1#指向未被掃瞄的入棧序列的元素,已經掃瞄了乙個

while

(outv < n)

:if stack[-1

]== outli[outv]

:#棧頂元素和出棧序列當前元素一樣,說明匹配了乙個出棧序列的元素

#就出棧

stack.pop(

) outv+=

1else

:if inv == n:

#掃瞄所有入棧序列後,inv會變成n,但變成n後就不應該再進入else了

#因為所有元素都已經入過棧了

return

'no'

#棧頂元素和出棧序列當前元素不一樣,說明它還沒入棧

#就入棧

) inv+=

1return

'yes'

print

(solve(n,inputli,outli)

)

2015筆試記錄

0916去哪兒網 1.removeelement arr,index 這麼簡單的題竟然寫錯了,把splice方法的返回值記錯了,splice返回的是刪除的元素陣列!2.陣列亂序問題 以前看過fisher yates的洗牌演算法,所以有點思路,但還是有細節錯誤 math.random 的範圍是 0,1...

中興2016筆試

簡答題 1 ip位址和mac位址有什麼區別?為什麼要有這兩種位址?對於ip位址,相信大家都很熟悉,即指使用tcp ip協議指定給主機的32位位址。ip位址由用點分隔開的4個8八位組構成,如192.168.0.1就是乙個ip位址,這種寫法叫點分十進位制格式。ip位址由網路位址和主機位址兩部分組成,分配...

2019 6 5筆試回顧

1.union和union all的區別 答案來自w3cshool select city,country from customers union select city,country from suppliers 上面的語句返回t 消費者和t 商的城市,國家。set 無重複 注 武漢,中國 和...