通過這次面試。突然感覺自己弱爆了。故寫此總結以記之。
1、給定乙個公升序的整型陣列和乙個整數,請在陣列中找出二個數使得這二個數的和等於所給定的這個數,若存在多組整數滿足條件。則輸出隨意一組就可以。要求時間複雜度為o(n)。
思路:使用陣列的下標和其值之和等於給定的數。
(鬱悶的是當時沒有想出來!
。)詳細方法:(如果給定的公升序陣列為a和整數n)
1) 新開闢乙個陣列b並初始化為零。
2) 對a進行遍歷,同一時候對b進行賦值,即b[a[i]] = n-a[i]。
3) 對a進行第二次遍歷,令tmp=a[i],然後我們得到b[tmp],再推斷b[b[tmp]]是否為零。若不為零則成功找到了而個數tmp和b[tmp],然後退出。若遍歷完a後沒有找到則尋找失敗。
注:此方法有一種情況未考慮到,當陣列存在乙個數k,且n=2*k時。這樣的情況需進行單獨考慮,陣列僅僅有乙個k時,則不滿足。若存在兩個k時符合條件。
另外,能夠從資料的兩側分別進行遍歷,此方法僅僅需對陣列進行一次遍歷就可以。
(第一次想到此方法時感覺不正確,後來通過證明。此方法是正確的)
2、有四十億個不同的正整數,如今要推斷一組資料a,b,c,d…是否在這四十億個資料中。
思路:直接採用雜湊表。
詳細方法:
1) 開闢乙個非常大的bool型別的陣列a,初始化為false。由於每乙個bool型別變數僅僅佔一位。40億個bool變數須要空間500mb左右的空間。
2) 對四十億個資料做一次遍歷,對每乙個數k,我們將a[k]=true。
3) 如今對於隨意個數n,僅僅需檢視a[n]是否為true,若為true,則存在,否則不存在。
3、找出下列**中存在的錯誤。
int cal(uint num)
return sum;
}
錯誤:
1) sum沒有初始化。
2) for迴圈是個死迴圈,由於a是個無符號的整形,總是》=0。所以是個死迴圈。
3) sum可能會溢位,sum是個無符號的整形,但在返回時給了乙個有符號的整形,因而可能溢位。
4、有乙個整數矩陣。矩陣中每行都是從低到高有序,每列相同從低到高有序。現給定乙個數。推斷這個數是否在這個整數矩陣中?
假如如今有例如以下矩陣a是m*n的矩陣,當中m=4, n=5。
1 2 5 7 14
3 4 10 15 18
6 9 12 17 22
8 11 13 21 25
如今我們要推斷15是否在矩陣中。
思路:將二分查詢推廣到二維空間。
詳細方法:
1) 矩陣的行從0-3,列0-4。依據二分查詢的思想。 row_mid=3/2=1, column_mid=4/2=2。我們能夠找到a[1][2]。
2) 由於a[1][2]=10 < 15。而且矩陣的隨意行和列都是公升序排列,所以15僅僅可能存在於a區,b區和c區中,例如以下圖所看到的。
3) 依次對以上的三個區域進行遞迴查詢就可以。
5、寫出strcpy函式的實現。
儘管看起來這個題目非常easy。可是能非常好的把實現寫出來並非那麼easy。當時在筆試的時候,考慮的問題太多了。
尤其是考慮了目的串的空間大小,假設小於源字串的長度時會產生錯誤或異常。於是在字串拷貝之前考慮怎樣獲取源字串的長度。由於不能直接sizeof(src),所以我就對源字串做了次遍歷。得到了源字串的長度,然後想獲取dest指向的空間大小。這樣就遇到問題了,由於dest指向的空間不像src那樣有結束標誌,所以在此不知道怎樣獲得dest所指向空間的大小。然後我就問了面試官怎麼求得dest指向的空間大小,他說也不知道。
好吧,這部分就擱置在這了。然後用了乙個迴圈將源字串複製給dest。
在這道簡單的**實現題中,我感覺對c++中的記憶體空間分配太敏感了。想的太多了,事實上真的非常easy。
在strcpy函式中計算源字串的長度儘管不能夠使用sizeof計算字串的大小,但能夠使用strlen,另外目標串指標指向的空間大小我如今也不知道怎樣獲取。
標準的寫法為:
char *(strcpy)(char *s1, const char *s2)
6、給定乙個數字字串即乙個大數,和乙個數d,求這個大數對d的餘數r。也就是大數求餘問題。屬於數論裡面的東西。
(簡單題,但當時竟然沒做出來。!!)
分析:首先要清楚大數求餘原理,
(a+b)%n = (a%n + b%n)%n;
(a*b)%n = ((a%n) * (b%n))%n;
如567%d = r。
r = ((((5%d)*10+6)%d)*10+7)%d.
核心**:
int r=a[0]%d;
for(i=1; i
2012 百度實習生面試題
一面 第一題 任意給乙個數,試證明這個數的某個倍數的十進位制表示是01串,比如3的倍數111是二進位制表示,5的倍數10是二進位制表示,等等。第二題 證明素數有無窮多個。第三題 給乙個很大的陣列,裡面有兩個數隻出現過一次,其他數都出現過兩次,把這兩個數找出來。void getnum int a,in...
百度實習生面試總結
突襲了四天,然後就再次奔上了面試之路。遲到了15分鐘,本來有點緊張的心倒是放鬆了。面試官人超nice,非常有耐心。下面總結了下主要的面試內容,大概1個小時 1.簡單的自我介紹 2.介紹了自己最熟悉的專案,因為事先有準備,所以還是比較順利 3.盒子模型的理解 4.考察css 寫乙個簡單地三欄兩列的布局...
百度實習生面試經歷
方法一 將25匹馬隨機劃分為5個組,分別進行比賽,每組取勝出的3馬 比賽5次 步驟 勝出3x5 15匹,15匹馬重複第乙個步驟,分為3組分別進行比賽,每組取勝出3匹 比賽3次 步驟 勝出3x3 9匹,9匹馬繼續分組,分為5匹 4匹兩組進行比賽,每組取勝出3匹 比賽2次 步驟 勝出3x2 6匹,6匹馬...