演算法面試,寫一個斐波那契數高效演算法
面試官:同學,你先自我介紹一下吧...
小菜鳥:* A#$b& 。。。把自己吹了一遍
...
...
面試官各種問,小菜鳥各種答。
隨後面試官拿來一張紙,一支筆,給我寫一個斐波那契數演算法,輸入n,返回第n位的斐波那契數。
小菜鳥心裡一笑,花了1分鐘,嘩嘩寫了一個函式。

面試官皺了一下眉,你這個函式的時間複雜度多少?
小菜鳥一愣,摸了摸頭,不確定的說 O(2^n)
面試官:那還有更快的方式嗎?你想想,如果採用遞迴,算n位的時候,需要計算第n-1和n-2位,計算n-1時需要計算n-2和n-3,有沒有發現很多都是重複計算?
小菜鳥拿起筆琢磨了一段時間,寫了又劃,劃了又寫,花了點時間,給面試官看了下面的程式碼。

面試官看了下,點了點頭說:現在這個的時間複雜度多少?
小菜鳥這下堅定的說 O(n)
不過面試官好像還不準備放過小菜鳥,時間複雜度還能不能更低?
小菜鳥這下不淡定了,想了好久了,幾張紙都塗塗畫畫了,還是沒能寫出另一個更優的演算法,最終只能搖搖頭作罷。
面試結束後,小菜鳥虛心跟面試官請教,斐波那契數的更優解法是什麼,可否指點一下。
面試官:可以通過矩陣求解,斐波那契的遞推公式可以表示成如下矩陣形式,所以其

所以根據矩陣的分治演算法,可以在O(logn)時間內算出結果。
小菜鳥聽完一頭霧水,只能回去再好好琢磨了。
其實,很多大公司比如BAT、Google、Facebook,面試的時候都喜歡考演算法、讓人現場寫程式碼。有些人雖然技術不錯,但每次去面試都會“跪”在演算法上,很是可惜。
為什麼這些大公司都喜歡考演算法呢?
校招的時候,面試的學生通常沒有實際專案經驗,只能考察基礎知識是否牢固。社招就更不用說了,越是厲害的公司,越是注重考察資料結構與演算法這類基礎知識。相比短期能力,他們看中你的長期潛力。
面試過程中表現出來的演算法能力,可以為本次面試加分不少,對於想在演算法方面提高的同學,我這裡推薦極客時間剛上不久的一個專欄,涵蓋了100多個演算法真實專案場景案例,作者還親自畫了一些清晰易懂的詳解圖,幫你理解核心概念和實現過程,展示每個知識點的框架邏輯,讓晦澀難懂的演算法變得輕鬆有趣。
這個演算法專欄真的受歡迎,剛上線1天,已經突破17000的訂閱

想訂閱的同學,可以掃下面的二維碼,加入學習,提高演算法思維能力。
