2010 10 17中科院搜狐筆試題

2021-05-23 08:16:36 字數 1294 閱讀 5648

題1:

給乙個陣列(1, 2, 2, 3, 4, 5),輸出其所有排列,如223415, 425213等,要求一行輸出乙個排列,並且4不能在位置3(估計從0開始的索引號為是2,我是這樣理解的),3和5不能相連。再計算輸出的列數為多少?

還算簡單,想了想寫出來了,回溯的思想。

如下所示:

計算輸出列數,用容斥原理解。

首先假設兩個2是相異的,求出排列數,設為m,則所求排列數為n = m / 2!

設a =

b =

則所求(^表示非,*表示與,+表示或)

m = |^a * ^b|

= i - |a| - |b| + |a * b|

= 6! - 5! - 2*5! + 2 * 3 * 3!

= 396

所以所求n = m / 2 = 198

題2:實現乙個棧,push和pop的操作時間複雜度為o(1),並且能夠在o(1)的時間內得到棧中元素的最小值。

解:當時沒想出來啊,鬱悶。

用兩個棧實現:棧s1和棧s2,

s1為空時:push時,棧s1和s2中同時存入元素

否則:push:push進s1,並把push的元素跟s2中棧頂元素比較,如push的元素小則把該元素也push進s2

pop:從s1中pop,如果發現pop的元素與s2棧頂元素相等,則s2也pop

具有下面的迴圈不變性:

對於s2中的每個元素e:

(1)e位於s2棧頂,則e是s1中所有元素的最小元素

(2)e不位於s2的棧頂,設e1是s2中e的棧位置的上乙個元素(靠近出口),則e是s1中e1之下元素序列中的最小元素。

證明:1)初始化時,顯然成立

2)push(e)時,設s2的棧頂元素為e1

2.1)如果e也push進了s2,則e < e1,根據假設e1是s1.push(e)之前s1中的最小元素,因此e是s1.push(e)後s1中的最小元素,(1)成立。對於s1中的元素,e1之上的元素除e外,都大於等於e1,因此e1是s1中e之下的元素序列中的最小元素,s2中e, e1之外的元素性質不變,(2)也成立。

2.2)如果e沒有push進s2,則e >= e1,根據假設,顯然e1仍然是s1中的最小元素,(1)成立。s2中其他元素性質保持不變,(2)仍然成立。

3)pop時,設s2棧頂為e,e之下的元素為e1(如果存在)

3.1)如果s2也pop了,則根據假設e1是s1中去掉e後的最小元素,(1)成立,其他元素性質不變(2)成立。

3.2)如果s2沒有pop,則e仍然是s1中的最小元素,(1)成立,其他元素性質不變(2)成立。

證畢。偽碼如下:

2016中科院推免

最近一直在忙著推免的事情,有一段時間沒寫東西了。很感謝csdn能夠提供乙個平台讓我在這裡寫一些與技術無關的東西,讓我在這裡肆意吐槽而不會把我拉進黑名單。接到了軟體所面試的通知,就過去了。15號下午的機試題目不難,就三題,要求乙個半小時之內完成。第一題很簡單,但是被我做麻煩了。第一題的大概意思就是輸入...

03 19 2005 中科院林大打球日記

本來有個mm約我去51打球的,今天早上又說她要加班去不了了,faint,最討厭別人晃點我了。正好兩個禮拜沒有參加俱樂部的活動了。中午想換乙個手膠,居然在飛凌見到single了,沒有合適的手膠,直接去打球了。昨天晚上的球還沒有恢復,加上騎了乙個小時自行車,感覺有些累。開始和single打半場,主要練習...

2013 07 11 中科院軟體所就業講座總結

昨天晚上下著小雨,和楊同學一起去軟體所蹭了個講座,兩個微軟公司的員工和乙個放棄6 個offer 出國的師兄介紹了找工作的流程。幾位師兄講得都很實際,接地氣,絕大部分是他們的經驗與教訓。經歷過大學生活,深知過來人說的事情多 麼重要,回來後感想很多,決定對自己的收穫做乙個總結,給自己和有需要的人們共勉吧...