1. 首頁
  2. 面試

百度面試題目

百度面試題目

1 完成函式

size_t foo(unsigned int *a1, size_t al1, unsigned int* a2, size_t al2)

其中a1和a2都為無符號陣列,al1和al2為陣列的長度,陣列的長度為偶數。

無符號陣列由一對數字區間組成。如下例:

a1 為 0,1,3,6,10,20

a2 為 0,1,20,50,4,5

則 a1表示以下區間[0,1] [3,6] [10,20]

a2表示以下區間[0,1] [20,50] [4,5]

則a1,a2的重疊部分為[0,1] [4,5],其長度為2

函式foo要求返回重疊區間的長度。上例中為2.

要求:

詳細說明自己的解題思路,說明自己實現的一些關鍵點。

寫出函式foo原始碼,另外效率儘量高,並給出程式碼的複雜性分析。

限制:

al1和al2的.長度不超過100萬。而且同一個陣列的區間可能出現重重疊。

如a1可能為 0,5, 4,8, 9,100, 70,80

使用的儲存空間儘量小。

2 多人排成一個佇列,我們認為從低到高是正確的序列,但是總有部分人不遵守秩序。如果說,前面的人比後面的人高(兩人身高一樣認為是合適的),那麼我們就認為這兩個人是一對“搗亂分子”,比如說,現在存在一個序列:

176, 178, 180, 170, 171

這些搗亂分子對為<176, 170>, <176, 171>, <178, 170>, <178, 171>, <180, 170>, <180, 171>,

那麼,現在給出一個整型序列,請找出這些搗亂分子對的個數(僅給出搗亂分子對的數目即可,不用具體的對)

要求:

輸入:

為一個檔案(in),檔案的每一行為一個序列。序列全為數字,數字間用”,”分隔。

輸出:

為一個檔案(out),每行為一個數字,表示搗亂分子的對數。

詳細說明自己的解題思路,說明自己實現的一些關鍵點。並給出實現的程式碼 ,並分析時間複雜度。

限制:

輸入每行的最大數字個數為100000個,數字最長為6位。程式無記憶體使用限制。

二、下面是兩道選做題,請根據自己的情況選擇其中的一道作答(WEB方向請答第4道,其他職位方向答第3道)。

3

考慮一個線上好友系統。系統為每個使用者維護一個好友列表,列表限制最多可以有500個好友,好友必須是這個系統中的其它使用者。好友關係是單向的,使用者B是使用者A的好友,但A不一定是B的好友。

使用者以ID形式表示,現給出好友列表資料的文字形式如下:

1 3,5,7,67,78,3332

2 567,890

31 1,66

14 567

78 10000

每行資料有兩列,第一列為使用者ID,第二列為其好友ID,不同ID間用”,”分隔,ID升序排列。列之間用”t”分隔。

要求:

請設計合適的索引資料結構,來完成以下查詢:

給定使用者A