日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

百度2011招聘笔试题+答案解析

發(fā)布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 百度2011招聘笔试题+答案解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、算法設計

1、設rand(s,t)返回[s,t]之間的隨機小數,利用該函數在一個半徑為R的圓內找隨機n個點,并給出時間復雜度分析。

?

?

?

2、為分析用戶行為,系統常需存儲用戶的一些query,但因query非常多,故系統不能全存,設系統每天只存m個query,現設計一個算法,對用戶請求的query進行隨機選擇m個,請給一個方案,使得每個query被抽中的概率相等,并分析之,注意:不到最后一刻,并不知用戶的總請求量。

?

?

?

3、C++ STL中vector的相關問題:

(1)、調用push_back時,其內部的內存分配是如何進行的?

?

?

(2)、調用clear時,內部是如何具體實現的?若想將其內存釋放,該如何操作?

?

?

二、系統設計
正常用戶端每分鐘最多發(fā)一個請求至服務端,服務端需做一個異常客戶端行為的過濾系統,設服務器在某一刻收到客戶端A的一個請求,則1分鐘內的客戶端任何其它請求都需要被過濾,現知每一客戶端都有一個IPv6地址可作為其ID,客戶端個數太多,以至于無法全部放到單臺服務器的內存hash表中,現需簡單設計一個系統,使用支持高效的過濾,可使用多臺機器,但要求使用的機器越少越好,請將關鍵的設計和思想用圖表和代碼表現出來。

?

?

三、求一個全排列函數:
如p([1,2,3])輸出:
[123]、[132]、[213]、[231]、[321]、[312]
?求一個組合函數。

?

?

參考答案(歡迎討論)轉載請注明來源http://www.cnblogs.com/jerry19880126/

一、算法設計

1. 如下:

View Code 1 int count = 0; 2 while( count < n) 3 { 4 x = rand(-R, R); 5 y = rand(-sqrt(R*R-x*x), sqrt(R*R-x*x)); 6 if(x*x + y*y != R*R) //排除正好落在圓上的情況 7 { 8 ++ count; 9 } 10 }

2. 不會,轉網友的方法:

思路:如果用戶查詢的數量小于m,那么直接就存起來。如果用戶查詢的數量大于m,假設為m+i,那么在1-----m+i之間隨機產生一個數,如果選擇的是前面m條查詢進行存取,那么概率為m/(m+i),如果選擇的是后面i條記錄中的查詢,那么用這個記錄來替換前面m條查詢記錄的概率為m/(m+i)*(1-1/m)=(m-1)/(m+i),當查詢記錄量很大的時候,m/(m+i)== (m-1)/(m+i),所以每個query被抽中的概率是相等的。

3.

(1)

若size < capacity, 則直接將數加入數組中,a[size++] = 新數;

否則,分配新內存,首先capacity = capacity + delta;

delta = capacity / 2 > 1 ? capacity: 1;

temp = new T [capacity];

其次,復制舊元素內容至新內存

copy a to temp

最后,釋放舊內存, delete [] a; a = temp;

并把追加新數 a[size++] = 新數。

?

(2)

調用clear時,內存并不釋放,只是作了size = 0 的處理。

釋放內存已經由vector底層做好,用戶一般不用去管,若要強行釋放,可以用swap方法,交換迭代器的地址。

即:

v.swap(vector<T>()),可以釋放v的內存。

?

?二、系統設計

不會

?

三、求全排列

View Code 1 #include <iostream> 2 using namespace std; 3 4 int n = 0; 5 6 void swap(int *a, int *b) 7 { 8 int m; 9 m = *a; 10 *a = *b; 11 *b = m; 12 } 13 void perm(int list[], int k, int m) 14 { 15 int i; 16 if(k > m) 17 { 18 for(i = 0; i <= m; i++) 19 { 20 printf("%d ", list[i]); 21 } 22 printf("\n"); 23 n++; 24 } 25 else 26 { 27 for(i = k; i <= m; i++) 28 { 29 swap(&list[k], &list[i]); 30 perm(list, k + 1, m); 31 swap(&list[k], &list[i]); 32 } 33 } 34 } 35 int main() 36 { 37 int list[] = {1, 2, 3, 4, 5}; 38 perm(list, 0, 4); 39 printf("total:%d\n", n); 40 return 0; 41 }

轉載于:https://www.cnblogs.com/jerry19880126/archive/2012/08/05/2623973.html

總結

以上是生活随笔為你收集整理的百度2011招聘笔试题+答案解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。