百度算法面試題分析


備注:幾天之前凌晨6點醒了,也許是心血來潮,突然想用手機記下自己當時思考的幾道百度算法面試題,

題目是在園子里看到的。草稿記在QQ日志草稿箱里。

 

已下為正文:

1.大整數相乘。

計算機表示整數的范圍有限,那怎么實現兩大整數相乘呢?

想了下沒有思路,咨詢了google大牛,看到有人是這樣實現的:

大整數用字符串表示,每個大整數每一個數字字符轉換為對應的整數,存入一維數組中,

然后被乘數的每一位數字分別與乘數的每一位數字相乘,結果保存在另一一維數組中,

此一維數組的大小為:被乘數的個數*乘數的個數,最后處理進位。

此方法用計算機模擬了兩數相乘的過程。還有沒有更好的方法?我暫時沒查到也沒想到。

既然大整數相乘計算機不能直接處理,自然而然會想到大整數相除呢?大整數相加呢?大整數相減呢?

大整數加減用計算機模擬人計算的過程很容易,難就難在大整數相除。

想到了兩中方法:

1.對大整數因式分解,直至每個因子計算機能表示

2.跟乘法一樣用計算機模擬,但是實現起來有些復雜,需要綜合使用大整數乘法,大整數減法,大整數比較。

第二題很簡單,這里就略過了。

3.有2n+1個數,有n個數重復,找出那個不同的數。

一開始沒有完全理解有n個數重復這句話,要完成這道題很簡單,可以先排序再找,也可以兩重循環遍歷,本來這道題沒有分析的必要,

但是看了園友的回復,有一個很巧妙的方法,利用位運算的異或性質,時間復雜度為n,a異或b異或b=a,a異或b=b異或a.這手機坑爹啊,異或符號打不出來。

4.有個樓梯,每次只能上一階或者兩階,到第N次的時候,總共走了多少階?把所有可能的情況打印出來。

題目大概是這個意思。剛開始不知道怎么下手,每次走的階數不固定,這有好多種情況,腦袋亂了,這可咋算?

根據概率來算有2的n次方種情況。看到園友的回復是一個費波那鍥數列,園主的回答是可以使用動態規划,這些方法可以解決這個問題?

動態規划方法求最值才適用。某個時候突然想到:這個是不是可以使用遞規來實現?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM