記騰訊創新班面試

昨天參加了騰訊創新班3+1的面試,覺得收穫匪淺,騰訊果然很多大牛啊。廢話少說下,記一下面試時候幾個有趣的問題,第一個是:

 

 

//代碼一
for(int i = 0 ; i<N ; i++){
 
     A;
     B;
     C;
}

//代碼二
for(int i = 0 ; i<N ; i++){
     A;    
}

for(int i = 0 ; i<N ; i++){
     B;
}

for(int i = 0 ; i<N ; i++){  
     C;
}

 

 問題是,在什麼情景下會出現代碼一比代碼二快執行完,在什麼情況下代碼二比代碼一快執行完?

答案一:線程阻塞可以達到代碼一比代碼二更快執行完的效果。具體一點說就是A語句是啓動的一個線程ThreadA,然後ThreadA在運行的過程中受到阻塞。由於只是線程ThreadA受到阻塞,對主線程沒什麼影響,主線程會繼續執行下去。所以代碼什麼時候執行完取決於最後一個啓動的ThreadA的結束時間。由於二中的最後一個的啓動時間比一中的早,顧可以出現二比一塊執行完得情況。

答案二是:A,B,C分別都是讀取文件的操作,在這種情況下代碼二的效率會比代碼一的效率高很多

答案三是:A是i--;B是i++;在代碼二中形成了死循環,所以一會比二快

 

 

問題二:

一個長字符竄和一個短字符串,判斷短字符串中的所有字符是否在長的字符竄中。

答案是:

一:直接遍歷,效果比較差

二:把所有的長字符竄的字母存進一個hashmap中,再用段字符竄的所有字母去hashmap中的去找。由於字符串很長,所以中間必然很多重複字母,用hashmap存儲去除重複字母,並且查找效率很高,所以這個算法效率較高。

三:把長字符竄的所有字母存進一個set中,記錄set中元素個數a,再繼續把短字符串的字母也放進set中,在記錄元素個數b,比較a,b就可以得到結果。

四:用一個01的竄記錄每個26個字母在長竄中字母是否出現的情況,然後遍歷短竄,可以通過短竄中的字母,找到對應的01位置,判斷短竄的字母是否在長竄中。這種的查找效率和比hashmap高,而且節省空間。

 

問題三:

有一百個階梯,一個人每次可以走一步或者兩步,一共有多少種走法?

答案一:用動態規劃的方法,聲明一個int result[101]的數組,用result[n]來存儲當有n級階梯時,一共有多少種走法。可以result【0】=0,result【1】=1,然後result【n】=result【n-1】+result【n-2】

答案二:用排列組合的方法。很容易可以得出走一步的次數x和走兩步的次數y,然後可以用排列組合的方法計算出來

 

以上的答案如有不對,請各位大牛們批評指出。或者如果大家如果有什麼好的想法也可以分享一下

 

總結:感覺騰訊的面試由淺到深,逐漸深入,要你不斷優化你的代碼,很考發散性思維。雖然順利通過了三面,但是自己還有很多不足之處,很多地方還要提高。在等通知中,希望可以通過吧。God bless me 。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章