問題集

 三個警察三個囚徒過河問題

三個警察和三個囚徒共同旅行。一條河擋住了去路,河邊有一條船,但是每次只能載2人。存在如下的危險:無論在河的哪邊,當囚徒人數多於警察的人數時,將有警察被囚徒殺死。問題:請問如何確定渡河方案,才能保證6人安全過河。


設計DNS服務器中cache的數據結構

設計一個DNS的Cache結構,要求能夠滿足每秒5000以上的查詢,滿足IP數據的快速插入,查詢的速度要快。

(題目還給出了一系列的數據,比如:站點數總共爲5000萬,IP地址有1000萬等等)


將多個集合合併成沒有交集的集合

給定一個字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求將其中交集不爲空的集合合併,要求合併完成後的集合之間無交集,例如上例應輸出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}。

(1) 請描述你解決這個問題的思路;

(2) 請給出主要的處理流程,算法,以及算法的複雜度

(3) 請描述可能的改進。


有兩個文件,各含50M和500個url,找出共同的URI

一個大的含有 50M 個URI的記錄,一個小的含有 500個 URI的記錄,找出兩個記錄裏相同的URI。


芯片測試

有 2000 塊芯片,已知好芯片比壞芯片多。請設計算法從其中找出一片好芯片,說明你所用的比較次數上限。其中,好芯片和其它芯片比較時,能正確給出另一塊芯片是好還是壞。壞芯片和其它芯片比較時,會隨機的給出好或是壞。


用C語言將字符串在原串上倒序

用C語言實現一個Reverse函數。功能是將輸入的字符串在原串上倒序後返回。


刪除所有ascii編碼的字符和數字

已知一個字串由GBK漢字和ascii編碼的數字和字母混合組成,編寫c語言函數實現從中去掉所有ascii編碼的字母和數字(包括大小寫),要求在原字符串上返回結果。

例如:“http://www.csdn.com/liuning800203”會變成“://../”。

注:函數接口爲:int filter_ascii(char* gbk);漢字的GBK編碼範圍是0x8140-0xFEFE。


判斷URL類型

編寫一個C語言函數,要求輸入一個URL,輸出該URL是首頁、目錄頁或者其他URL
如下形式叫做首頁:
militia.info/
www.apcnc.com.cn/
http://www.cyjzs.comwww.greena888.com/
如下形式叫做目錄頁:
http://hi.baidu.com/mianshiti/
thursdaythree.net/greenhouses--gas-global-green-house-warming/ 
請注意:
1)URL有可能帶http頭也有可能不帶
2)動態URL(即含有"?"的URL)的一律不算目錄頁,如:
www.buddhismcity.net/utility/mailit.php?l=/activity/details/3135/
www.buddhismcity.net/utility/mailit.php?l=/activity/details/2449/


找出給定字符串對應的序號

序列Seq=[a,b,…z,aa,ab…az,ba,bb,…bz,…,za,zb,…zz,aaa,…] 類似與excel的排列,任意給出一個字符串s=[a-z]+(由a-z字符組成的任意長度字符串)。

請問s是序列Seq的第幾個。


找出第k大的數字所在的位置

寫一段程序,找出數組中第k大小的數,輸出數所在的位置。例如{2,4,3,4,7}中,第一大的數是7,位置在4。第二大、第三大的數都是4,位置在1、3隨便輸出哪一個均可。


找出滿足條件的數組

給定函數d(n) = n + n的各位之和,n爲正整數,如 d(78) = 78+7+8=93。 這樣這個函數可以看成一個生成器,如93可以看成由78生成。

定義數A:數A找不到一個數B可以由d(B)=A,即A不能由其他數生成。現在要寫程序,找出1至10000裏的所有符合數A定義的數。


對正整數得到 1 需要操作的次數

實現一個函數,對一個正整數 n,算得到 1 需要的最少操作次數。操作規則爲:如果 n 爲偶數,將其除以 2;如果 n 爲奇數,可以加 1 或減 1;一直處理下去。
例子:

func(7) = 4,可以證明最少需要4次運算

n = 7

n-1 6

n/2 3

n-1 2

n/2 1

要求:實現函數(實現儘可能高效) int func(unsign int n);n 爲輸入,返回最小的運算次數。

給出思路(文字描述),完成代碼,並分析你算法的時間複雜度。


找出 N! 後面 0 的個數

對任意輸入的正整數 N,求 N! 的尾部連續 0 的個數,並指出計算複雜度。如:18!=6402373705728000,尾部連續 0 的個數是 3。

(不用考慮數值超出計算機整數界限的問題)


判斷兩棵樹是否相等

請實現兩棵樹是否相等的比較,相等返回 1,否則返回其他值,並說明算法複雜度。

數據結構爲:

typedef struct_TreeNode{
  char c;
  TreeNode *leftchild;
  TreeNode *rightchild;
}TreeNode;

函數接口爲:int CompTree(TreeNode* tree1,TreeNode* tree2);
注:A、B兩棵樹相等當且僅當Root->c==RootB-->c,而且A和B的左右子樹相等或者左右互換相等


正向最大匹配分詞

在100萬個數中找最大的前100個數。


找出被修改過的數字

n個空間(其中n<1M),存放a到a+n-1的數,位置隨機且數字不重複,a爲正且未知。現在第一個空間的數被誤設置爲-1。已經知道被修改的數不是最小的。請找出被修改的數字是多少。

例如:n=6,a=2,原始的串爲5, 3, 7, 6, 2, 4。現在被別人修改爲-1, 3, 7, 6, 2, 4。現在希望找到5。


session和cache的區別

session和cache的區別是什麼?


從海量日誌中提取訪問百度次數最多的IP

海量日誌數據,提取出某日訪問百度次數最多的那個IP。


將query按照出現的頻度排序

有10個文件,每個文件1G,每個文件的每一行都存放的是用戶的query,每個文件的query都可能重複。如何按照query的頻度排序?


找出數組中出現次數超過一半的數

現在有一個數組,已知一個數出現的次數超過了一半,請用O(n)的複雜度的算法找出這個數。


從兩個文件(各含50億個url)中找出共同的url

給定a、b兩個文件,各存放50億個url,每個url各佔用64字節,內存限制是4G,如何找出a、b文件共同的url?


如何找出字典中的兄弟單詞

給定一個單詞a,如果通過交換單詞中字母的順序可以得到另外的單詞b,那麼定義b是a的兄弟單詞。

現在給定一個字典,用戶輸入一個單詞,如何根據字典找出這個單詞有多少個兄弟單詞?


螞蟻爬杆

有一根27釐米長的細木杆,在第3釐米,7釐米,11釐米,17釐米,23釐米這五個位置上各有一隻螞蟻,木杆很細,不能同時通過兩隻螞蟻,開始時,螞蟻的頭朝向左還是右是任意的,他們只會朝前走或掉頭,但不會後退,當兩隻螞蟻相遇後,螞蟻會同時掉頭朝反方向走,假設螞蟻們每秒鐘可以走1釐米的距離。

求所有螞蟻都離開木杆的最小時間和最大時間。


從300萬信息中檢索最熱門的前10條

輸入信息是一個字符串,從300萬信息中,統計最熱門的前10條。每次輸入的一個字符串爲不超過255byte,內存使用只有1G。

請描述思想,寫出算法(C語言),空間和時間複雜度。


從輸入URL到顯示網頁,後臺發生了什麼

當在瀏覽器中輸入一個 url 後回車,後臺發生了什麼?

分成如下幾個階段:

1,輸入地址。如果不是第一次訪問該頁面,那麼直接從瀏覽器緩存獲得該頁面。否則,從服務器獲得。這步會依次查找瀏覽器緩存,系統緩存,路由器緩存,ISP DNS緩存,根域名服務器;
2,發出HTTP請求。利用TCP/IP協議,向服務器發送HTTP請求,然後等待服務器響應;
3,服務器響應該請求。服務器響應該請求,返回頁面內容;
4,瀏覽器解析頁面。由於採用異步回發,瀏覽器在解析頁面時,可能仍然會向服務器端發出HTTP請求,與服務器進行交互。

參看:

1)關於HTTP協議:http://www.w3.org/Protocols/rfc2616/rfc2616.txt
2)關於HTTP協議的實驗:http://blog.csdn.net/liuning800203/category/733280.aspx
3)Wiki:http://zh.wikipedia.org/wiki/Asp.net#.E5.8F.83.E8.80.83.E8.B3.87.E6.96.99

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章