Google面試題之棧的設計

2021-06-19 05:45:37 字數 1240 閱讀 3181

日期:2013.11.17

地點:湖南大學軟體大樓211

題目:定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min、push以及pop的時間複雜度都是o(1)。

棧(stack) 是限定在表尾(棧頂)進行插入或刪除操作一種線性結構,該結構資料元素有filo的特點,基本操作包括插入,刪除,判斷為空等。

三、思路

按照棧的定義,push和pop操作理所當然時間複雜度為o(1),但min只借助於棧是無法達到要求的,因為我們還建設乙個輔助棧,輔助棧和主棧平行操作,主棧正常儲存資料,輔助棧則平行儲存主棧中數值最小的索引。由此我們可通過輔助棧以時間複雜度o(1)順利找到主棧中得最小值。

四、解決方案

採用c++的模板程式設計實現。

1.標頭檔案保護符設定,防止多重檔案包含

//日期:2013.11.10

//地點:軟體大樓

//描述:google面試之自定義棧

#ifndef stack_design_h //標頭檔案保護符

#define stack_design_h

#include using namespace std;

2.棧的定義,包括友元,在類模板函式中直接定義友元可恨大程度上避免錯誤,這是經驗法則。

class mystack

else

}};

3.類的實現,模板類函式成員的實現和模板類的定義都放在同乙個頭資料夾下也是經驗法則

templatevoid mystack::push(const t &value)

}templatevoid mystack::pop()

else }

template bool mystack::empty()const

templateconst t &mystack::top() const

templateconst t &mystack::min()const

4.測試函式,通過在原檔案中建立main()函式對我們剛剛建立的模板進行測試驗證

//日期:2013.11.10

//地點:軟體大樓

#include #include "stackdesign.h"

using namespace std;

int main(void)

Google 的面試題

一輛學校班車裡面能裝多少個高爾夫球?你被縮小到只有硬幣厚度那麼點高 不是壓扁,是按比例縮小 然後被扔到乙個空的玻璃攪拌器中,攪拌刀片一分鐘後就開始轉動。你怎麼辦?要是讓你清洗整個西雅圖的所有窗子,你會收取多少費用?怎麼才能識別出電腦的記憶體堆疊是向上溢位還是向下溢位?你要向你8歲的侄子解釋什麼是資料...

Google 的面試題

google 的面試題 這些應該都屬於智力測試類的題目吧,開始想想答案。一輛學校班車裡面能裝多少個高爾夫球?你被縮小到只有硬幣厚度那麼點高 不是壓扁,是按比例縮小 然後被扔到乙個空的玻璃攪拌器中,攪拌刀片一分鐘後就開始轉動。你怎麼辦?要是讓你清洗整個西雅圖的所有窗子,你會收取多少費用?怎麼才能識別出...

google的面試題

幾星期前,乙個朋友接受了google公司的面試,他透露了面試中的一些問題。順便,我把從其他幾個曾經面試過的人那裡聽來的內容也整理在一起。最大的網際網路公司google的乙份面試題集,看看你是否能夠回答出來。其中很多問題都是開放式的,正確的解答有許多種,所以在這裡就不提供答案了。一輛學校班車裡面能裝多...