2023年百度實習生面試題及總結

2021-09-09 04:31:03 字數 2503 閱讀 7725

通過這次面試。突然感覺自己弱爆了。故寫此總結以記之。

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匹馬...