果然不愧是百度,算法崗位的題目在廣度和深度方面都超過了我之前做的幾家,在這里放出部分我記得的筆試題,如有侵權,請聯系作者刪除
題目類型:30選擇+1道問答+1道系統設計+2道編程,題量很大
一、選擇題
選擇題面非常寬,不建議花費太多時間,涉及到的知識點有C++、python、數據庫、分頁式存儲管理、機器學習、自然語言處理、數據結構、操作系統,基本是應有盡有,估計這么設計就是為了讓大家快點蒙完,然后做后面的題目
二、問答題
問答題問了自然語言處理的相關知識
- 什么是統計語言模型?
- 統計語言模型中的ngram模型是什么概念?相關的公式推導是?
- 如何估計ngram模型中的參數
答案可以參考 https://www.cnblogs.com/yehui-mmd/p/8082877.html
https://blog.csdn.net/ed_new/article/details/51924535
三、系統設計題
要求設計一個推薦系統,我個人認為推薦系統還算是一個比較常考的問題,建議筆試之前認真准備一下,否則很難回答上來。
四、編程題
(1)連分數比大小
連分數可以表示為(a0;a1,a2,……,an),這樣直觀的數學表示為:
輸入
n,之后是n+1個數字,分別表示a0,a1,……,an
m,之后是m+1個數字,分別表示b0,b1,……,bn
要求比較以上兩個連分數(分別記為x和y)的大小,n和m不超過100000
輸出
若x>y,輸出“>”,若x<y,輸出“<”,否則輸出“=”
分析:這盜圖並不是很難,但是由於我最后時間不夠,導致寫的代碼沒時間上傳編譯,我自己測試了幾組數據,問題不大。我的思路是先比較兩個數字是否相等,之后把連分數化為小數進行比較。使用的數據結構為vector,代碼如下:
1 #include<iostream> 2 #include <vector> 3 #include <algorithm> 4 using namespace std; 5 int main() 6 { 7 vector<int> x(100100); 8 vector<int> y(100100); 9 int numX, numY; 10 //double resX = 0.0,resY = 0.0; 11 cin >> numX; 12 for (int i = 0; i < numX + 1; i++) 13 cin >> x[i]; 14 cin >> numY; 15 for (int i = 0; i < numY + 1; i++) 16 cin >> y[i]; 17 if (x == y) 18 cout << '=' << endl; 19 else 20 { 21 double tempX = x[numX]; 22 for (int i = numX-1; i >= 0; i--) 23 { 24 tempX = x[i] + 1.0 / tempX; 25 //resX += 1.0 / x[i] + x[i - 1]; 26 } 27 double tempY = y[numY]; 28 for (int i = numY - 1; i >= 0; i--) 29 tempY = y[i] + 1.0 / tempY; 30 31 //cout << tempX << endl;// << " " << tempY << endl; 32 if (tempX > tempY) 33 cout << '>'; 34 else 35 cout << '<'; 36 // cout << temp << endl; 37 } 38 return 0; 39 }
(2)區域划分