[轉]九月十月百度人搜,阿里巴巴,騰訊華爲筆試面試八十題(第331-410題)

 

引言

    自發表上一篇文章至今(事實上,上篇文章更新了近3個月之久),blog已經停了3個多月,而在那以前,自開博以來的21個月每個月都未曾斷過。正如上一篇文章支持向量機通俗導論(理解SVM的三層境界)末尾所述:」額,blog許久未有更新了,由於最近實在忙,無暇顧及blog。「與此同時,工做之餘,也一直在閒心研究數據挖掘:"神經網絡將可能做爲Top 10 Algorithms in Data Mining之番外篇第1篇,同時,k-最近鄰法(k-nearest neighbor,kNN)算法談到kd樹將可能做爲本系列第三篇。這是此係列接下來要寫的兩個算法,恰好項目中也要用到KD樹「。html

    但很顯然,若要等到下一篇數據挖掘系列的文章時(更新:下一篇kd樹目前已經完成:http://t.cn/zjLQ8Ky),說不定要到年末去了,而最近的這段時間,9月、10月,正是各類校招/筆試/面試火熱進行的時節,本身則但願能幫助到這些找工做的朋友,故此,怎能無動於衷,因而,3個多月後,blog今天更新了。node

    再者,雖然blog自10年10月開通至11年10月,一年的時間內整理了300多道面試題(這300道題所有集錦在此文中第一部分:http://blog.csdn.net/v_july_v/article/details/6543438)。但畢竟那些題已是前年或去年的了,筆試面試題雖然每一年類型變化不大,但畢竟它年年推陳出新,存着就有其合理性。linux

    OK,如下是整理自8月下旬至10月分內的各大公司的筆試面試三十題(注:全部題目基本上所有爲軟件開發方向,題目來源:網絡收集),相信必定能給正在參加各類校招的諸多朋友多少幫助,學習參考或借鑑(若是你手頭上有好的筆試/面試題,歡迎經過微博私信:http://weibo.com/julyweibo,或郵箱:zhoulei0907@yahoo.cn發給我,或者乾脆直接評論在本文下;同時,若你對如下任何一題有任何見解.想法.思路或建議,歡迎留言評論,你們一塊兒討論,共同享受思考的樂趣,謝謝)。ios

九月十月百度人搜,阿里巴巴,騰訊華爲小米搜狗筆試面試八十題c++

    「我正在一點一點作.整理下面的筆試面試題,歡迎讀者朋友們跟我一塊兒作,你能夠把你的答案或代碼直接評論在本文之下,也能夠經過私信或郵件發給我,感謝諸位。同時,如下全部任何題目所給的點評裏的答案,尤爲是所給的外部連接如有任何問題,歡迎在本文評論下留言指正,謝謝。答題除了讓你感覺到思考的樂趣之外,還有獎哦,請君自看。July、二零一二年十月十一日」
    1. 9月11日, 京東:web

      談談你對面向對象編程的認識面試

    2. 8月20日,金山面試,題目以下:
          數據庫1中存放着a類數據,數據庫2中存放着以天爲單位劃分的表30張(好比table_20110909,table_20110910,table_20110911),總共是一個月的數據。表1中的a類數據中有一個字段userid來惟一判別用戶身份,表2中的30張表(每張表結構相同)也有一個字段userid來惟一識別用戶身份。如何斷定a類數據庫的多少用戶在數據庫2中出現過?
      來源:http://topic.csdn.net/u/20120820/23/C6B16CCF-EE15-47C0-9B15-77497291F2B9.html
    3. 百度實習筆試題(2012.5.6)
       一、一個單詞單詞字母交換,可得另外一個單詞,如army->mary,成爲兄弟單詞。提供一個單詞,在字典中找到它的兄弟。描述數據結構和查詢過程。評點:同去年9月份的一道題,見此文第3題:http://blog.csdn.net/v_july_v/article/details/6803368
      二、線程和進程區別和聯繫。什麼是「線程安全」
      三、C和C++怎樣分配和釋放內存,區別是什麼
      四、算法題1
      一個url指向的頁面裏面有另外一個url,最終有一個url指向以前出現過的url或空,這兩種情形都定義爲null。這樣構成一個單鏈表。給兩條這樣單鏈表,判斷裏面是否存在一樣的url。url以億級計,資源不足以hash。
      五、算法題2
      數組al[0,mid-1] 和 al[mid,num-1],都分別有序。將其merge成有序數組al[0,num-1],要求空間複雜度O(1)
      六、系統設計題
      百度搜索框的suggestion,好比輸入「北京」,搜索框下面會以北京爲前綴,展現「北京愛情故事」、「北京公交」、「北京醫院」等等搜索詞,輸入「結構之」,會提示「結構之法」,「結構之法 算法之道」等搜索詞。
      請問,如何設計此係統,使得空間和時間複雜度儘可能低。

      評點:①直接上Trie樹「Trie樹的介紹見:從Trie樹(字典樹)談到後綴樹」 +  TOP K「hashmap+堆,hashmap+堆 統計出如10個近似的熱詞,也就是說,只存與關鍵詞近似的好比10個熱詞,詳細方法可參看此文第2個題的講解:http://blog.csdn.net/v_july_v/article/details/7382693」? 
      ②or Double-array trie tree?同時,StackOverflow上也有兩個討論帖子:http://stackoverflow.com/questions/2901831/algorithm-for-autocompletehttp://stackoverflow.com/questions/1783652/what-is-the-best-autocomplete-suggest-algorithm-datastructure-c-c
      ③此外,這裏有一篇關於「拼寫錯誤檢查」問題的介紹,或許對你有所啓示:http://blog.afterthedeadline.com/2010/01/29/how-i-trie-to-make-spelling-suggestions/。
    4. 人搜筆試
    5. 1. 快排每次以第一個做爲主元,問時間複雜度是多少?(O(N*logN))

        2. T(N) = N + T(N/2)+T(2N), 問T(N)的時間複雜度是多少? 點評:O(N*logN) or O(N)?

        3. 從(0,1)中平均隨機出幾回才能使得和超過1?(e)

        4.編程題:

       一棵樹的節點定義格式以下:

       struct Node{

          Node* parent;

          Node* firstChild; // 孩子節點

          Node* sibling; // 兄弟節點 

      }

      要求非遞歸遍歷該樹。

      思路:採用隊列存儲,來遍歷節點。

        5. 算法題:

      有N個節點,每兩個節點相鄰,每一個節點只與2個節點相鄰,所以,N個頂點有N-1條邊。每一條邊上都有權值wi,定義節點i到節點i+1的邊爲wi。

      求:不相鄰的權值和最大的邊的集合。
    1. 人搜面試,所投職位:搜索研發工程師:面試題回憶 
           一、刪除字符串開始及末尾的空白符,而且把數組中間的多個空格(若是有)符轉化爲1個。
           二、求數組(元素可爲正數、負數、0)的最大子序列和。 
           三、鏈表相鄰元素翻轉,如a->b->c->d->e->f-g,翻轉後變爲:b->a->d->c->f->e->g 
           四、鏈表克隆。鏈表的結構爲: 
           typedef struct list { 
               int data; //數據字段 
           list *middle; //指向鏈表中某任意位置元素(可指向本身)的指針 
           list *next;//指向鏈表下一元素 
           } list; 
           五、100萬條數據的數據庫查詢速度優化問題,解決關鍵點是:根據主表元素特色,把主表拆分並新建副表,而且利用存儲過程保證主副表的數據一致性。(不用寫代碼) 
           六、求正整數n全部可能的和式的組合(如;4=1+1+1+一、1+1+二、1+三、2+1+一、2+2)。點評:這裏有一參考答案:http://blog.csdn.net/wumuzi520/article/details/8046350
           七、求旋轉數組的最小元素(把一個數組最開始的若干個元素搬到數組的末尾,咱們稱之爲數組的旋轉。輸入一個排好序的數組的一個旋轉,輸出旋轉數組的最小元素。例如數組{3, 4, 5, 1, 2}爲{1, 2, 3, 4, 5}的一個旋轉,該數組的最小值爲1) 
           八、找出兩個單鏈表裏交叉的第一個元素 
           九、字符串移動(字符串爲*號和26個字母的任意組合,把*號都移動到最左側,把字母移到最右側並保持相對順序不變),要求時間和空間複雜度最小 
           十、時間複雜度爲O(1),怎麼找出一個棧裏的最大元素   
           十一、線程、進程區別 
           十二、static在C和C++裏各表明什麼含義 
           1三、const在C/C++裏什麼意思 
           1四、經常使用linux命令 
           1五、解釋Select/Poll模型 
    2. 網易有道二面:
      判斷一個數字序列是BST後序遍歷的結果,現場寫代碼。
      來源:http://blog.csdn.net/hopeztm/article/category/1201028
    3. 8月30日,網易有道面試題
      var tt = 'aa';
      function test()
      {
        alert(tt);
        var tt = 'dd';
        alert(tt);
      }
      test();  
    4. 8月31日,百度面試題:不使用隨機數的洗牌算法,詳情:http://topic.csdn.net/u/20120831/10/C837A419-DFD4-4326-897C-669909BD2086.html
    5. 9月6日,阿里筆試題:平面上有不少點,點與點之間有可能有連線,求這個圖裏環的數目。
    6. 9月7日,一道華爲上機題:
      題目描述: 選秀節目打分,分爲專家評委和大衆評委,score[] 數組裏面存儲每一個評委打的分數,judge_type[] 裏存儲與 score[] 數組對應的評委類別,judge_type == 1,表示專家評委,judge_type == 2,表示大衆評委,n表示評委總數。打分規則以下:專家評委和大衆評委的分數先分別取一個平均分(平均分取整),而後,總分 = 專家評委平均分 * 0.6 + 大衆評委 * 0.4,總分取整。若是沒有大衆評委,則 總分 = 專家評委平均分,總分取整。函數最終返回選手得分。
      函數接口 int cal_score(int score[], int judge_type[], int n)  
       上機題目須要將函數驗證,可是題目中默認專家評委的個數不能爲零,可是如何將這種專家數目爲0的情形排除出去。
      來源:http://topic.csdn.net/u/20120907/15/c30eead8-9e49-41c2-bd11-c277030ad17a.html
    7. 9月8日,騰訊面試題:
      假設兩個字符串中所含有的字符和個數都相同咱們就叫這兩個字符串匹配,
       好比:abcda和adabc,因爲出現的字符個數都是相同,只是順序不一樣,
       因此這兩個字符串是匹配的。要求高效!
      又是跟上述第3題中簡單題一的兄弟節點相似的一道題,我想,大家能想到的,這篇blog裏:http://blog.csdn.net/v_JULY_v/article/details/6347454都已經有了。
    8. 阿里雲,搜索引擎中5億個url怎麼高效存儲;
    9. 一道C++筆試題,求矩形交集的面積:
      在一個平面座標系上,有兩個矩形,它們的邊分別平行於X和Y軸。
      其中,矩形A已知, ax1(左邊), ax2(右邊), ay1(top的縱座標), ay2(bottom縱座標). 矩形B,相似,就是 bx1, bx2, by1, by2。這些值都是整數就OK了。
      要求是,若是矩形沒有交集,返回-1, 有交集,返回交集的面積。
      int area(rect const& a, rect const& b)
      {
        ...
      }
      點評:
      healer_kx:
      補齊代碼,最好是簡潔的,別用庫。你能夠寫你的輔助函數,宏定義,代碼風格也很重要。
      ri_aje:
      1. struct rect  
      2. {  
      3.  // axis alignment assumed  
      4.  // bottom left is (x[0],y[0]), top right is (x[1],y[1])  
      5.  double x [2];  
      6.  double y [2];  
      7. };  
      8.   
      9. template <typename T> T const& min (T const& x, T const& y) { return x<y ? x : y; }  
      10. template <typename T> T const& max (T const& x, T const& y) { return x>y ? x : y; }  
      11.   
      12. // return type changed to handle non-integer rects  
      13. double area (rect const& a, rect const& b)  
      14. {  
      15.  // perfectly adjacent rects are considered having an intersection of 0 area  
      16.  double const dx = min(a.x[1],b.x[1]) - max(a.x[0],b.x[0]);  
      17.  double const dy = min(a.y[1],b.y[1]) - max(a.y[0],b.y[0]);  
      18.  return dx>=0&&dy>=0 ? dx*dy : -1;  
      19. }  
      下面是一個簡短的證實。
      對於平行於座標軸的矩形 r,假設其左下角點座標爲 (rx0,ry0),右上角點座標爲 (rx1,ry1),那麼由 r 定義的無限有界點集爲:{(x,y)|x in [rx0,rx1] && y in [ry0,ry1]}。
      根據交集的定義,則任意二維點 (x,y) 在矩形 a,b 的交集內等價於
      {(x,y)|(x,y) in a 而且 (x,y) in b} <==>
      {(x,y)|x in [ax0,ax1] && x in [bx0,bx1] 而且 y in [ay0,ay1] && y in [by0,by1]} <==>
      {(x,y)|x in [max(ax0,bx0),min(ax1,bx1)] 而且 y in [max(ay0,by0),min(ay1,by1)]}
      所以,交集矩形的邊長分別爲 min(ax1,bx1)-max(ax0,bx0) 和 min(ay1,by1)-max(ay0,by0)。注意當交集爲空時(a,b 不相交),則經此法計算出來的交集邊長爲負值,此事實可用於驗證 a,b 的相交性。
      鑑於笛卡爾積各個維度上的不相關性,此方法可擴展到任意有限維線性空間,好比,三維空間中平行於座標軸的長方體的交集體積能夠用相似的方法計算。
      來源:http://topic.csdn.net/u/20120913/18/bc669d60-b70a-4008-be65-7c342789b925.html
    10. 2012年創新工場校園招聘最後一道筆試題:工場很忙
          創新工場每一年會組織同窗與項目的雙選會,假設如今有M個項目,編號從1到M,另有N名同窗,編號從1到N,每名同窗能選擇最多三個、最少一個感興趣的項目。選定以後,HR會安排項目負責人和相應感興趣的同窗一對一面談,每次面談持續半小時。因爲你們平時都很忙,因此我們要儘可能節約時間,請你按照如下的條件設計算法,幫助HR安排面試。
      1)同窗很忙。項目負責人一次只能與一名同窗面談,而同窗會在本身第一個面試開始時達到工場,最後一個面試結束後離開工場,若是參加一個項目組的面試後不能當即參加下一個項目組的面試,就必須在工場等待。因此請儘量讓同窗的面試集中在某一時間段,減小同窗在工場等待的時間。
      2)項目負責人很忙。衆所周知,創業團隊的負責人會有不少事情要作,因此他們但願可以將本身參與的面試集中在某一段時間內,請在保證1)的狀況下,使得項目負責人等待的時間最少。
      3)HR很忙。從第一輪面試開始之後,全部HR都必須等到最後一輪面試結束,因此須要在保證1)和2)的同時,也能儘快解放掉全部的HR,即讓第一輪面試到最後一輪面試之間持續的時間最短。
      輸入(以文件方式輸入,文件名爲iw,例如iw.in):
          第1行...第n行:同窗的編號 項目的編號
          樣例(數據間用空格隔開,兩個0表示輸入結束):           
      1 1
      1 2
      1 3
      2 1
      3 1
      3 2
      0 0             
          表示M=3,N=3,編號爲1的同窗選擇了項目1,2和3,編號爲2的同窗選擇了項目1,編號爲3的同窗選了項目1和2
      輸出(以文件方式輸出,文件名爲iw,例如iw.out):
          第1行:編號爲1的項目依次面試新同窗的編號序列
          第2行:編號爲2的項目依次面試新同窗的編號序列
          ...
          第n行:編號爲n的項目依次面試新同窗的編號序列
          樣例(數據間用空格隔開,0表示沒有面試):
      1 3 2
      3 1 0
      0 0 1
          表示編號爲1的項目在第一輪面試編號爲1的同窗,第二輪面試編號爲3的同窗,第三輪面試編號爲2的同窗
          編號爲2的項目在第一輪面試編號爲3的同窗,第二輪面試編號爲1的同窗,第二輪不用面試
          編號爲3的項目在第一輪和第二輪都不用面試,第三輪面試編號爲1的同窗
      連接:http://t.qq.com/p/t/108332110988802
    11. 4**9 的筆試題,比較簡單:
      1.求鏈表的倒數第二個節點
      2.有一個整數數組,求數組中第二大的數算法

    12. 阿里巴巴二道題
      第一道:
      對於給定的整數集合S,求出最大的d,使得a+b+c=d。a,b,c,d互不相同,且都屬於S。集合的元素個數小於等於2000個,元素的取值範圍在[-2^28,2^28 - 1],假定可用內存空間爲100MB,硬盤使用空間無限大,試分析時間和空間複雜度,找出最快的解決方法。
      點評:
      @綠色夾克衫:兩兩相加轉爲多項式乘法,好比(1 2 4 6) + (2 3 4 5) => (x + x^2 + x^4 + x^6)*(x^2 + x^3 + x^4 + x^5) 。更多思路請見這: http://www.51nod.com/answer/index.html#!answerId=569
      阿里巴巴第二道(研發類)
      筆試題1,原題大體描述有一大批數據,百萬級別的。數據項內容是:用戶ID、科目ABC各自的成績。其中用戶ID爲0~1000萬之間,且是連續的,能夠惟一標識一條記錄。科目ABC成績均在0~100之間。有兩塊磁盤,空間大小均爲512M,內存空間64M。
      1) 爲實現快速查詢某用戶ID對應的各科成績,問磁盤文件及內存該如何組織;
      2) 改變題目條件,ID爲0~10億之間,且不連續。問磁盤文件及內存該如何組織;
      3) 在問題2的基礎上,增長一個需求。在查詢各科成績的同時,獲取該用戶的排名,問磁盤文件及內存該如何組織。
      筆試題2:代碼實現計算字符串的類似度。
      點評:和計算兩字符串的最長公共子序列類似。
      設Ai爲字符串A(a1a2a3 … am)的前i個字符(即爲a1,a2,a3 … ai)
      設Bj爲字符串B(b1b2b3 … bn)的前j個字符(即爲b1,b2,b3 … bj)
      設 L(i , j)爲使兩個字符串和Ai和Bj相等的最小操做次數。
      當ai等於bj時 顯然L(i, j)=L(i-1, j-1)
      當ai不等於bj時
        若將它們修改成相等,則對兩個字符串至少還要操做L(i-1, j-1)次
        若刪除ai或在Bj後添加ai,則對兩個字符串至少還要操做L(i-1, j)次
        若刪除bj或在Ai後添加bj,則對兩個字符串至少還要操做L(i, j-1)次
        此時L(i, j)=min( L(i-1, j-1), L(i-1, j), L(i, j-1) )  + 1
      顯然,L(i, 0)=i,L(0, j)=j, 再利用上述的遞推公式,能夠直接計算出L(i, j)值。具體代碼請見這: http://blog.csdn.net/flyinghearts/article/details/5605996。 
    13. 9月14日,小米筆試,給一個浮點數序列,取最大乘積子序列的值,例如 -2.5,4,0,3,0.5,8,-1,則取出的最大乘積子序列爲3,0.5,8。
      點評:
      解法1、
           或許,讀者初看此題,天然會想到最大乘積子序列問題相似於最大子數組和問題:http://blog.csdn.net/v_JULY_v/article/details/6444021,然實則具體處理起來諸多不一樣,爲何呢,由於乘積子序列中有正有負也還可能有0。
          既如此,咱們能夠把問題簡化成這樣:數組中找一個子序列,使得它的乘積最大;同時找一個子序列,使得它的乘積最小(負數的狀況)。由於雖然咱們只要一個最大積,但因爲負數的存在,咱們同時找這兩個乘積作起來反而方便。也就是說,不但記錄最大乘積,也要記錄最小乘積。So,
      咱們讓maxCurrent表示當前最大乘積的candidate,
      minCurrent反之,表示當前最小乘積的candidate。
      (用candidate這個詞是由於只是可能成爲新一輪的最大/最小乘積),
      而maxProduct則記錄到目前爲止全部最大乘積candidates的最大值。
          因爲空集的乘積定義爲1,在搜索數組前,maxCurrent,minCurrent,maxProduct都賦爲1。
      假設在任什麼時候刻你已經有了maxCurrent和minCurrent這兩個最大/最小乘積的candidates,新讀入數組的元素x(i)後,新的最大乘積candidate只多是maxCurrent或者minCurrent與x(i)的乘積中的較大者,若是x(i)<0致使maxCurrent<minCurrent,須要交換這兩個candidates的值。
          當任什麼時候候maxCurrent<1,因爲1(空集)是比maxCurrent更好的candidate,因此更新maxCurrent爲1,相似的能夠更新minCurrent。任什麼時候候maxCurrent若是比最好的maxProduct大,更新maxProduct。
          具體代碼以下:
      1. template <typename Comparable>  
      2. Comparable maxprod( const vector<Comparable>&v)  
      3. {  
      4.     int i;  
      5.     Comparable maxProduct = 1;  
      6.     Comparable minProduct = 1;  
      7.     Comparable maxCurrent = 1;  
      8.     Comparable minCurrent = 1;  
      9.     //Comparable t;  
      10.   
      11.     for( i=0; i< v.size() ;i++)  
      12.     {  
      13.         maxCurrent *= v[i];  
      14.         minCurrent *= v[i];  
      15.         if(maxCurrent > maxProduct)   
      16.             maxProduct = maxCurrent;  
      17.         if(minCurrent > maxProduct)  
      18.             maxProduct = minCurrent;  
      19.         if(maxCurrent < minProduct)  
      20.             minProduct = maxCurrent;  
      21.         if(minCurrent < minProduct)  
      22.             minProduct = minCurrent;  
      23.         if(minCurrent > maxCurrent)  
      24.             swap(maxCurrent,minCurrent);  
      25.         if(maxCurrent<1)  
      26.             maxCurrent = 1;  
      27.         //if(minCurrent>1)  
      28.         //    minCurrent =1;  
      29.     }  
      30.     return maxProduct;   
      31. }  
      解法2、
          本題除了上述相似最大子數組和的解法,也能夠直接用動態規劃求解(其實,上述的解法一本質上也是動態規劃,只是解題所表現出來的具體形式與接下來的解法二不一樣罷了。這個不一樣就在於下面的解法二會寫出動態規劃問題中經典常見的狀態轉移方程,而解法一是直接求解)。具體解法以下:
          假設數組爲a[],直接利用動歸來求解,考慮到可能存在負數的狀況,咱們用Max[i]來表示以a[i]結尾的最大連續子序列的乘積值,用Min[i]表示以a[i]結尾的最小的連續子序列的乘積值,那麼狀態轉移方程爲:
             Max[i]=max{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
             Min[i]=min{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
          初始狀態爲Max[1]=Min[1]=a[1]。代碼以下:
      1. /* 
      2.  給定一個整數數組,有正有負數,0,正數組成,數組下標從1算起 
      3.  求最大連續子序列乘積,並輸出這個序列,若是最大子序列乘積爲負數,那麼就輸出-1 
      4.  用Max[i]表示以a[i]結尾乘積最大的連續子序列 
      5.  用Min[i]表示以a[i]結尾乘積最小的連續子序列  由於有複數,因此保存這個是必須的 
      6. */  
      7. void longest_multiple(int *a,int n){  
      8.  int *Min=new int[n+1]();  
      9.  int *Max=new int[n+1]();  
      10.  int *p=new int[n+1]();  
      11.  //初始化  
      12.  for(int i=0;i<=n;i++){  
      13.   p[i]=-1;  
      14.  }  
      15.  Min[1]=a[1];  
      16.  Max[1]=a[1];  
      17.  int max_val=Max[1];  
      18.  for(int i=2;i<=n;i++){  
      19.   Max[i]=max(Max[i-1]*a[i],Min[i-1]*a[i],a[i]);  
      20.   Min[i]=min(Max[i-1]*a[i],Min[i-1]*a[i],a[i]);  
      21.   if(max_val<Max[i])  
      22.    max_val=Max[i];  
      23.  }  
      24.  if(max_val<0)  
      25.   printf("%d",-1);  
      26.  else  
      27.   printf("%d",max_val);  
      28. //內存釋放  
      29.  delete [] Max;  
      30.  delete [] Min;  
      31. }  
      變種
          此外,此題還有另外的一個變種形式,即給定一個長度爲N的整數數組,只容許用乘法,不能用除法,計算任意(N-1)個數的組合中乘積最大的一組,並寫出算法的時間複雜度。
        咱們能夠把全部可能的(N-1)個數的組合找出來,分別計算它們的乘積,並比較大小。因爲總共有N個(N-1)個數的組合,總的時間複雜度爲O(N2),顯然這不是最好的解法。
        OK,如下解答來自編程之美
      解法1

      解法2
        此外,還能夠經過分析,進一步減小解答問題的計算量。假設N個整數的乘積爲P,針對P的正負性進行以下分析(其中,AN-1表示N-1個數的組合,PN-1表示N-1個數的組合的乘積)。
         1.P爲0          那麼,數組中至少包含有一個0。假設除去一個0以外,其餘N-1個數的乘積爲Q,根據Q的正負性進行討論:
      Q爲0
      說明數組中至少有兩個0,那麼 N-1個數的乘積只能爲0,返回0;
      Q爲正數
      返回 Q,由於若是以0替換此時 AN -1中的任一個數,所獲得的 PN -1爲0,必然小於 Q
      Q爲負數
      若是以0替換此時 AN -1中的任一個數,所獲得的 PN -1爲0,大於 Q,乘積最大值爲0。

           2.    P爲負數sql

      根據「負負得正」的乘法性質,天然想到從 N個整數中去掉一個負數,使得 PN -1爲一個正數。而要使這個正數最大,這個被去掉的負數的絕對值必須是數組中最小的。咱們只須要掃描一遍數組,把絕對值最小的負數給去掉就能夠了。

            3.    P爲正數shell

      相似地,若是數組中存在正數值,那麼應該去掉最小的正數值,不然去掉絕對值最大的負數值。
          上面的解法採用了直接求N個整數的乘積P,進而判斷P的正負性的辦法,可是直接求乘積在編譯環境下每每會有溢出的危險(這也就是本題要求不使用除法的潛在用意),事實上可作一個小的轉變,不須要直接求乘積,而是求出數組中正數(+)、負數(-)和0的個數,從而判斷P的正負性,其他部分與以上面的解法相同。
          在時間複雜度方面,因爲只須要遍歷數組一次,在遍歷數組的同時就可獲得數組中正數(+)、負數(-)和0的個數,以及數組中絕對值最小的正數和負數,時間複雜度爲O(N)。
    14. 9月15日,中興面試:
      小端系統
      1. union{  
      2.         int i;  
      3.         unsigned char ch[2];  
      4. }Student;  
      5.   
      6.   
      7. int main()  
      8. {  
      9.         Student  student;  
      10.         student.i=0x1420;  
      11.         printf("%d  %d",student.ch[0],student.ch[1]);  
      12.     return 0;  
      13. }  
      輸出結果爲?(答案:32 20)
    15. 一道有趣的Facebook面試題:
      給一個二叉樹,每一個節點都是正或負整數,如何找到一個子樹,它全部節點的和最大? 
      點評:
      @某猛將兄:後序遍歷,每個節點保存左右子樹的和加上本身的值。額外一個空間存放最大值。
      @陳利人:同窗們,若是你面試的是軟件工程師的職位,通常面試官會要求你在短期內寫出一個比較整潔的,最好是高效的,沒有什麼bug的程序。因此,光有算法不夠,還得多實踐。
      寫完後序遍歷,面試官可能接着與你討論,a). 若是要求找出只含正數的最大子樹,程序該如何修改來實現?b). 假設咱們將子樹定義爲它和它的部分後代,那該如何解決?c). 對於b,加上正數的限制,方案又該如何?總之,一道看似簡單的面試題,可能能變換成各類花樣。
      好比,面試管可能還會再提兩個要求:第一,不能用全局變量;第一,有個參數控制是否要只含正數的子樹。其它的,隨意,固然,編程風格也很重要。
    16. 谷歌面試題:
      有幾百億的整數,分佈的存儲到幾百臺經過網絡鏈接的計算機上,你可否開發出一個算法和系統,找出這幾百億數據的中值?就是在一組排序好的數據中居於中間的數。顯然,一臺機器是裝不下全部的數據。也儘可能少用網絡帶寬。
    17. 小米,南京站筆試(原第20題):
      一個數組裏,數都是兩兩出現的,可是有三個數是惟一出現的,找出這三個數。
      點評:
      3個數惟一出現,各不相同。因爲x與a、b、c都各不相同,所以x^a、x^b、x^c都不等於0。具體答案請參看這兩篇文章:一、http://blog.csdn.net/w397090770/article/details/8032898,二、http://zhedahht.blog.163.com/blog/static/25411174201283084246412/
    18. 9月19日,IGT面試:你走到一個分叉路口,有兩條路,每一個路口有一我的,一個說假話,一個說真話,你只能問其中一我的僅一個問題,如何問才能獲得正確答案?點評:答案是,問其中一我的:另外一我的會說你的路口是通往正確的道路麼?
    19. 9月19日,創新工廠筆試題:
      給定一整型數組,若數組中某個下標值大的元素值小於某個下標值比它小的元素值,稱這是一個反序。
      即:數組a[]; 對於i < j 且 a[i] > a[j],則稱這是一個反序。
      給定一個數組,要求寫一個函數,計算出這個數組裏全部反序的個數。
      點評:
      歸併排序,至於有的人說是否有O(N)的時間複雜度,我認爲答案是否認的,正如老夢所說,下限就是nlgn,n個元素的數組的排列共有的排列是nlgn,n!(算法導論裏面也用遞歸樹證實了:O(n*logn)是最優的解法,具體能夠看下這個連接:)。而後,我再給一個連接,這裏有那天筆試的兩道題目:http://blog.csdn.net/luno1/article/details/8001892
    20. 9月20日,創新工廠南京站筆試:
      已知字符串裏的字符是互不相同的,如今任意組合,好比ab,則輸出aa,ab,ba,bb,編程按照字典序輸出全部的組合。
      點評:非簡單的全排列問題(跟全排列的形式不一樣,abc 全排列的話,只有6個不一樣的輸出:http://blog.csdn.net/v_july_v/article/details/6879101)。本題可用遞歸的思想,設置一個變量表示已輸出的個數,而後當個數達到字符串長度時,就輸出。
      1. //假設str已經有序,from 一直很安靜  
      2. void perm(char *str, int size, int resPos)  
      3. {  
      4.     if(resPos == size)  
      5.     print(result);  
      6.     else  
      7.     {  
      8.     for(int i = 0; i < size; ++i)  
      9.         {  
      10.       result[resPos] = str[i];  
      11.       perm(str, size, resPos + 1);  
      12.     }  
      13.     }  
      14. }  
    21. 9月21日,小米,電子科大&西安交通大學筆試題:
      1. void fun()  
      2. {  
      3.     unsigned int a = 2013;  
      4.     int b = -2;  
      5.     int c = 0;  
      6.     while (a + b > 0)  
      7.     {  
      8.         a = a + b;  
      9.         c++;  
      10.     }  
      11.     printf("%d", c);  
      12. }  
      問:最後程序輸出是多少?點評:此題有陷阱,答題需謹慎!

      點評:
      針對上述第3題朋友圈的問題,讀者@互聯網的飛蟲提供的解法及代碼以下(有任何問題,歡迎指正,多謝):
      1. #include <STDIO.H>  
      2. #include <WINDOWS.H>  
      3.   
      4.   
      5. int Friends(int n, int m , int* r[]);  
      6.   
      7. int main(int argc,char** argv)  
      8. {   
      9.   int r[5][2] = {{1,2},{4,3},{6,5},{7,8},{7,9}};  
      10.    
      11.   printf("有%d個朋友圈。\n",Friends(0,5,(int**)r));  
      12.   return 0;  
      13. }  
      14.   
      15. int Friends(int n, int m, int* r[]) // 注意這裏的參數很奇葩    
      16. {  
      17.    
      18.   int *p = (int*)malloc(sizeof(int)*m*3);  
      19.   
      20.   memset(p,0,sizeof(int)*m*3);  
      21.   int i = 0;  
      22.   
      23.   int iCount = 0;  
      24.   
      25.   int j = 0;  
      26.   
      27.   int * q = (int*)r; // 這裏很巧妙  將二維指針 強轉爲一維指針  
      28.   
      29.   for (i=0;i<m;++i)  
      30.   {  
      31.     for (j=0;j<2;++j)  
      32.     {  
      33.       p[i*3+j]=q[i*2+j];   // 注意這裏二維數組向一維數組的轉換  
      34.     }  
      35.   
      36.     p[i*3+j] = 0;  
      37.   }  
      38.   
      39.   bool bFlag = false;  
      40.   
      41.   for (i=0;i<m;++i)  
      42.   {  
      43.     bFlag = false;  
      44.     if (p[i*3+2]==1)  
      45.     {  
      46.        bFlag = true;  
      47.     }  
      48.     p[i*3+2] = 1;  
      49.     for (j=0;j<m;++j)  
      50.     {  
      51.       if (i==j)  
      52.       {  
      53.         continue;  
      54.       }   
      55.        
      56.   
      57.       if (p[i*3]==p[j*3] ||  
      58.         p[i*3] == p[j*3+1] ||  
      59.         p[i*3+1] == p[j*3+0] ||  
      60.         p[i*3+1] == p[j*3+1])  
      61.       {  
      62.         if (p[j*3+2]==1)  
      63.         {  
      64.           bFlag = true;  
      65.         }  
      66.         p[j*3+2] = 1;  
      67.       }  
      68.     }  
      69.   
      70.     if (!bFlag)  
      71.     {  
      72.       ++iCount;  
      73.     }  
      74.   }  
      75.   
      76.   free(p);   
      77.     
      78.   return iCount;  
      79. }  
    22. 9月21日晚,海豚瀏覽器筆試題:
      一、有兩個序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列,對於1<=i,j<=k,求k個最小的(ai+bj),要求算法儘可能高效。
      二、輸入:
      L:「shit」「fuck」「you」
      S:「shitmeshitfuckyou」
      輸出:S中包含的L一個單詞,要求這個單詞只出現一次,若是有多個出現一次的,輸出第一個這樣的單詞
      怎麼作?
    23. 9月22日上午,百度西安站全套筆試題以下:
      點評:上述的系統設計題簡單來說,是創建起按鍵號碼數字到人名(手機號)的映射關係,具體講,步驟解法以下圖所示:

      3.算法與程序設計
      第一題:
      某個公司舉行一場羽毛球賽,有1001我的參加,如今爲了評比出「最厲害的那我的」,進行淘汰賽,請問至少須要進行多少次比賽。
      第二題
      有100個燈泡,第一輪把全部燈泡都開啓,第二輪把奇數位的燈泡滅掉,第三輪每隔兩個燈泡,滅一個,開一個,依此類推。求100輪後還亮的燈泡。
      點評:徹底平方數,本人去58面試時,也遇到過與此相似的題。
      第三題
      有20個數組,每一個數組裏面有500個數組,降序排列,每一個數字是32位的unit,求出這10000個數字中最大的500個。
      點評:http://www.51nod.com/question/index.html#!questionId=647
      4.系統設計題
      相似作一個手機鍵盤,上面有1到9個數字,每一個數字都表明幾個字母(好比1表明abc三個字母,z表明wxyz等等),如今要求設計當輸入某幾個數字的組合時,查找出通信錄中的人名及電話號碼。
      其它的還有三道簡答題,好比線程的死鎖,內存的管理等等。最後,附一討論帖子:http://topic.csdn.net/u/20120923/18/7fd148b2-c000-4326-93a6-cb3bb8675702.html
    24. 9月22日,微軟筆試:
      T(n)=1(n<=1),T(n) = 25*T(n/5) + n^2,求算法的時間複雜度。更多題目請參見:http://blog.csdn.net/wonderwander6642/article/details/8008209
    25. 9月23日,騰訊校招部分筆試題(特別提醒:下述試卷上的答案只是一考生的解答,非表明正確答案.以下面第11題答案選D,第12題答案選C,至於解釋可看這裏:http://coolshell.cn/articles/7965.html):

      點評:根號九說,不過最後兩道大的附加題,全是秒殺99%海量數據處理面試題裏的:http://blog.csdn.net/v_july_v/article/details/7382693,太感謝July了。
    26. 9月23日,搜狗校招武漢站筆試題:
      1、已知計算機有如下原子操做
      一、 賦值操做:b = a;
      二、 ++a和a+1;
      三、for( ){ ***}有限循環;
      四、操做數只能爲0或者正整數;
      五、定義函數
      實現加減乘操做
      2、對一個鏈表進行排序,效率越高越好,LinkedList<Integer>.

      附:9月15日,搜弧校招筆試題:http://blog.csdn.net/hackbuteer1/article/details/8015964
    27. 搜狗校招筆試題:
      100個任務,100個工人每人可作一項任務,每一個任務每一個人作的的費用爲t[100][100],求一個分配任務的方案使得總費用最少。
      點評:匈牙利算法,能夠看看這篇文章:http://www.byvoid.com/blog/hungary/,及這個連接:http://www.51nod.com/question/index.html#!questionId=641
    28. 9月24日,Google南京等站全套筆試題以下:

      點評:
      谷歌的筆試從易到難,基礎到複雜,涵蓋操做系統 網絡 數據結構 語言 數學思惟 編程能力 算法能力,基本上能把一我的的能力全面考察出來。
      至於上述2.1尋找3個數的中位數,請看讀者sos-phoenix給出的思路及代碼:
      1. 2.1 // 採用兩兩比較的思路(目前沒想到更好的)    
      2.     if (a <= b) {    
      3.         if (b <= c)    
      4.             return b;    
      5.         else {    
      6.             if (a <=c)    
      7.                 return c;    
      8.             else    
      9.                 return a;    
      10.             }    
      11.     }    
      12.     else {    
      13.         if (a <= c)    
      14.             return a;    
      15.         else {    
      16.             if (b <= c)    
      17.                 return c;    
      18.             else    
      19.                 return b;    
      20.             }    
      21.     }    
      最壞狀況下的比較次數:3 (次)
      平均狀況下的比較次數:(2×2 + 4*3)/6 = 8/3 (次)
      此外這題,微博上的左耳朵耗子後來也給出了一個連接:http://stackoverflow.com/questions/1582356/fastest-way-of-finding-the-middle-value-of-a-triple,最後是微博上的梁斌penny的解答:http://weibo.com/1497035431/yFusm7obQ。其他更多參考答案請看本文評論下第93樓。
    29. 讀者來信,提供的幾個hulu面試題:
      9月19號,hulu電面:
      問題1 兩個骰子,兩我的輪流投,直到點數和大於6就中止,最終投的那我的獲勝。問先投那我的獲勝機率?
      問題2  平面上n個圓,任意兩個都相交,是否有一條直線和全部的圓都有交點。
      9月22號,上午hulu面試
      問題1 100我的,每人頭上戴一頂帽子,寫有0..99的一個數,數可能重複,每一個人都只能看到除本身之外其餘人的帽子。每一個人須要說出本身的帽子的數,一我的說對就算贏。點評:參考答案請看這個連接:http://www.51nod.com/question/index.html#!questionId=642
      問題2 n臺機器,每臺有負載,以和負載成正比的機率,隨機選擇一臺機器。「原題是但願設計O(1)的算法(預處理O(n)不可少,要算出每臺機器的比例),由於非O(1)的話,就trivial了:能夠產生隨機數例如[0,1)而後,根據負載比例,2分或者直接循環檢查落入哪一個區間,決定機器。 面試官想問,有沒更好的辦法,避免那種查找。即可否屢次(常數次)調用隨機函數,擬合出一個機率分佈」
      問題3  行列都遞增的矩陣,求中位數。點評:http://www.51nod.com/question/index.html#!questionId=643http://blog.csdn.net/v_july_v/article/details/7085669(楊氏矩陣查找問題)。
    30. 西安百度軟件研發工程師:
      一面(2012.9.24):
      問的比較廣,涉及操做系統、網絡、數據結構。比較難的就2道題。
      (1)10億個int型整數,如何找出重複出現的數字;
      (2)有2G的一個文本文檔,文件每行存儲的是一個句子,每一個單詞是用空格隔開的。問:輸入一個句子,如何找到和它最類似的前10個句子。(提示:可用倒排文檔)。
      二面(2012.9.25):
      (1)一個處理器最多能處理m個任務。如今有n個任務須要完成,每一個任務都有本身完成所需的時間。此外每一個任務之間有依賴性,好比任務A開始執行的前提是任務B必須完成。設計一個調度算法,使得這n這任務的完成時間最小;
      (2)有一個排序二叉樹,數據類型是int型,如何找出中間大的元素;
      (3)一個N個元素的整形數組,如何找出前K個最大的元素。
      (4)給定一個凸四邊形,如何判斷一個點在這個平面上。
      點評:本題的討論及參考答案請見這:http://www.51nod.com/question/index.html#!questionId=669
      運維部(2012.9.27):
      (1)堆和棧的區別;
      (2)問如何數出本身頭上的頭髮。
    31. 9月25日,人人網筆試題:

      點評:參考答案請見,http://www.51nod.com/question/index.html#!questionId=671
    32. 9月25日晚,創新工場校園招聘北郵站筆試:
    33. 9月25日,小米大連站筆試題:
      1一共有100萬,抽中的2萬,每個月增長4萬,問20個月能抽中的機率爲:?
      2 for(int i=0;i<strlen(s);i++){n+=I;}時間複雜度O(n)
      3 手機wifi(A)….wifi ap….局域網(B)…..路由器…ADSL(C)…..互聯網…..服務器
        斷掉上述ABC哪些點TCP連接會馬上斷掉?
      4 12345入棧,出棧結果 21543 31245 43215 12534 可能的爲?(第一個和第三個)
      5 x^n+a1x^n-1+…+an-1x+an,最少要作—乘法?題目中a1,a2,an爲常數。
    34. 9月26日,百度一二面:
      一、給定一數組,輸出知足2a=b(a,b表明數組中的數)的數對,要求時間複雜度儘可能低。
      二、搜索引擎多線程中每一個線程佔用多少內存?若是搜索引擎存儲網頁內存佔用太大怎麼解決?
      三、有不少url,例如*.baidu.com,*.sina.com ......
      如今給你一個sports.sina.com 快速匹配出是*.sina.com。點評:老題,此前blog內曾整理過。
      四、找出字符串的編輯距離,即把一個字符串s1最少通過多少步操做變成編程字符串s2,操做有三種,添加一個字符,刪除一個字符,修改一個字符(只要聽過編輯距離,知道往動態規劃上想,很快就能夠找到解法)。

      點評:請看連接:http://blog.csdn.net/Lost_Painting/article/details/6457334
      五、編程實現memcopy,注意考慮目標內存空間和源空間重疊的時候。
      六、實現簡單的一個查找二叉樹的深度的函數。
    35. 9月26日晚,優酷土豆筆試題一道:
      優酷是一家視頻網站,天天有上億的視頻被觀看,如今公司要請研發人員找出最熱門的視頻。 
      該問題的輸入能夠簡化爲一個字符串文件,每一行都表示一個視頻id,而後要找出出現次數最多的前100個視頻id,將其輸出,同時輸出該視頻的出現次數。 
      1.假設天天的視頻播放次數爲3億次,被觀看的視頻數量爲一百萬個,每一個視頻ID的長度爲20字節,限定使用的內存爲1G。請簡述作法,再寫代碼。 
      2.假設每月的視頻播放次數爲100億次,被觀看的視頻數量爲1億,每一個視頻ID的長度爲20字節,一臺機器被限定使用的內存爲1G。 
      點評:有關海量數據處理的題目,請到此文中找方法(不管題目形式怎麼變,基本方法不變,固然,最最經常使用的方法是:分而治之/Hash映射 + Hash統計 + 堆/快速/歸併排序):http://blog.csdn.net/v_july_v/article/details/7382693。注:上題第二問文件太大,則可如模1000,把整個大文件映射爲1000個小文件再處理 ....
    36. 9月26日,baidu面試題:
      1.進程和線程的區別
      2.一個有序數組(從小到大排列),數組中的數據有正有負,求這個數組中的最小絕對值
      3.鏈表倒數第n個元素
      4.有一個函數fun能返回0和1兩個值,返回0和1的機率都是1/2,問怎麼利用這個函數獲得另外一個函數fun2,使fun2也只能返回0和1,且返回0的機率爲1/4,返回1的機率爲3/4。(若是返回0的機率爲0.3而返回1的機率爲0.7呢)
      5.有8個球,其中有7個球的質量相同,另外一個與其餘球的質量不一樣(且不知道是比其餘球重仍是輕),請問在最壞的狀況下,最少須要多少次就能找出這個不一樣質量的球
      6.數據庫索引
      7.有一個數組a,設有一個值n。在數組中找到兩個元素a[i]和a[j],使得a[i]+a[j]等於n,求出全部知足以上條件的i和j。
      8.1萬個元素的數組,90%的元素都是1到100的數,10%的元素是101--10000的數,如何高效排序。
    37. 小米的web開發筆試題:
      一場星際爭霸比賽,共8我的,每一個人的實力用分數表示,要分紅兩隊,如何保證明力最平均?給定一個浮點數的序列,F1,F2,……,Fn(1<=n<=1000),定義P(s,e)爲子序列Fi(s<=i<=e)的積,求P的最大值。
    38. 9月27日,趨勢科技面試題:
      馬路口,30分鐘內看到汽車的機率是95%,那麼在10分鐘內看不到汽車的機率是?
    39. 9月27日晚,IGT筆試題:
      給定一個字符串裏面只有"R" "G" "B" 三個字符,請排序,最終結果的順序是R在前 G中 B在後。
      要求:空間複雜度是O(1),且只能遍歷一次字符串。
      點評:本質是荷蘭國旗問題,相似快排中partition過程,具體思路路分析及代碼能夠參考此文第8節:http://blog.csdn.net/v_july_v/article/details/6211155
    40. 9月27日,人人兩面:
      一面
         1 實現atoi
         2 單鏈表變形 如 1 2 3 4 5 變爲 1 3 5 4 2   如1 2 3 4 變爲 1 3 4 2 
           (就是拆分鏈表 把偶數爲反過來接在奇數位後面)
      二面
         1 二叉樹查找不嚴格小於一個值的最大值(返回節點)。
         2 有序數組裏二分查找一個數(若是有相同的找最後一次出現的)。
         3 等價於n*n的矩陣,填寫0,1,要求每行每列的都有偶數個1 (沒有1也是偶數個),問有多少種方法。
         評論:開始覺得是算法題,想了狂搜,遞推(dp,能夠用xor表示一行的列狀態,累加),分治,(拆兩半,而後上半段下半段的列有相同的奇偶性)。後來,本身算了幾個發現n = 1 n = 2 n = 3 的結果,他告訴了我n = 4是多少,而後發現f(n) = 2^((n - 1) ^2) 。最後我給出了一個巧妙的證實。而後發現若是是m*n的矩陣也是相似的答案,不侷限於方陣。此外,題目具體描述能夠看看這裏:http://blog.himdd.com/?p=2480
      9月27日,小米兩面:
      一面:
      除了聊研究,就一道題
        1 數組裏找到和最接近於0的兩個值。
      二面:
        1 行列有序的矩陣查找一個數
        2 直方圖最大矩形。點評:這裏有此題的具體表述及一份答案:http://blog.csdn.net/xybsos/article/details/8049048
        3 next_permutation 
        4 字符串匹配 含有* ? (寫代碼)
        5 實現strcpy memmove (必須寫代碼)
      1. //void * memmove ( void * destination, const void * source, size_t num );)  
      2. //是<string.h>的標準函數,其做用是把從source開始的num個字符拷貝到destination。  
      3. //最簡單的方法是直接複製,可是因爲它們可能存在內存的重疊區,所以可能覆蓋了原有數據。  
      4. //好比當source+count>=dest&&source<dest時,dest可能覆蓋了原有source的數據。  
      5. //解決辦法是從後往前拷貝。  
      6. //對於其它狀況,則從前日後拷貝。  
      7.  void* memmove(void* dest, void* source, size_t count)  
      8.    {  
      9.   
      10.       void* ret = dest;  
      11.   
      12.       if (dest <= source || dest >= (source + count))  
      13.        {  
      14.           //正向拷貝  
      15.          //copy from lower addresses to higher addresses  
      16.          while (count --)  
      17.              *dest++ = *source++;  
      18.      }  
      19.      else  
      20.      {  
      21.          //反向拷貝  
      22.          //copy from higher addresses to lower addresses  
      23.          dest += count - 1;  
      24.          source += count - 1;  
      25.   
      26.          while (count--)  
      27.              *dest-- = *source--;  
      28.      }  
      29.      return ret;  
      30.  }  
        更多,還能夠參見此文第三節節末:http://blog.csdn.net/v_july_v/article/details/6417600,或此文:http://www.360doc.com/content/11/0317/09/6329704_101869559.shtml
        6 讀數 (千萬億,百萬億……)變爲數字 (說思路便可,字符串查找,填寫各個權值的字段,而後判斷是否合法,讀前面那些×權值,累加)。
    41. 9月27日,Hulu 2013北京地區校招筆試題
      填空題:
      一、中序遍歷二叉樹,結果爲ABCDEFGH,後序遍歷結果爲ABEDCHGF,那麼前序遍歷結果爲?
      二、對字符串HELL0_HULU中的字符進行二進制編碼,使得字符串的編碼長度儘量短,最短長度爲?
      三、對長度12的有序數組進行二分查找,目標等機率出如今數組的每一個位置上,則平均比較次數爲?
      四、一副撲克(去王),每一個人隨機的摸兩張,則至少須要多少人摸牌,才能保證有兩我的抽到一樣的花色。
      五、x個小球中有惟一一個球較輕,用天平秤最少稱量y次能找出這個較輕的球,寫出y和x的函數表達式y=f(x)
      六、3的方冪及不相等的3的方冪的和排列成遞增序列1,3,4,9,10,12,13……,寫出數列第300項
      七、無向圖G有20條邊,有4個度爲4的頂點,6個度爲3的頂點,其他頂點度小於3,則G有多少個頂點
      八、桶中有M個白球,小明每分鐘從桶中隨機取出一個球,塗成紅色(不管白或紅都塗紅)再放回,問小明將桶中球所有塗紅的指望時間是?
      九、煤礦有3000噸煤要拿到市場上賣,有一輛火車能夠用來運煤,火車最多能裝1000噸煤,且火車自己須要燒煤作動力,每走1千米消耗1噸煤,如何運煤才能使得運到市場的煤最多,最可能是多少?
      十、1,2,3,4…..n,n個數進棧,有多少種出棧順序,寫出遞推公式(寫出通項公式不得分)
      十一、宇宙飛船有100,000位的存儲空間,其中有一位有故障,現有一種Agent能夠用來檢測故障,每一個Agent能夠同時測試任意個位數,若都沒有故障,則返回OK,如有一位有故障,則失去響應。若是有無限多個Agent可供使用,每一個Agent進行一次檢測須要耗費1小時,如今有2個小時時間去找出故障位,問最少使用多少個Agent就能找出故障。
      (總共12道填空題,還有一道太複雜,題目很長,還有示意圖,這裏沒有記錄下來)
      大題:
      一、n個數,找出其中最小的k個數,寫出代碼,要求最壞狀況下的時間複雜度不能高於O(n logk)
      二、寫程序輸出8皇后問題的全部排列,要求使用非遞歸的深度優先遍歷
      三、有n個做業,a1,a2…..an,做業aj的處理時間爲tj,產生的效益爲pj,最後完成期限爲dj,做業一旦被調度則不能中斷,若是做業aj在dj前完成,則得到效益pj,不然無效益。給出最大化效益的做業調度算法。點評:參考答案請看這個連接:http://www.51nod.com/question/index.html#!questionId=645
    42. 有道的一個筆試題,1-9,9個數組成三個三位數,且都是徹底平方數(三個三位數 佔據 9個數)求解法。
    43. 點評@林晚楓&歸雲見鴻:

      (a*10+b)(a*10+b)

      100a^2+20ab+b^2

      a 屬於 [1,2,3]

      a=3,b=1 31  961,

      a=2,b=3 23  529 400+40b+b^2 

              25  625

              27  729

              28  784

              29  841

      a=1,b=3 13  169  100+20b+b^2

              14  196

              16  256

              17  289

              18  324

              19  361

      =>最終惟一解  529  784 361

      具體代碼以下(3個for循環,而後hash):

  1. 9月28日,大衆點評北京筆試題目:
    1.一個是跳臺階問題,能夠1次一級,1次兩級,1次三級,求N級的跳法一共多少種? 
    點評:老題,參考答案請見:http://blog.csdn.net/v_july_v/article/details/6879101
    2.一個文件有N個單詞,每行一個,其中一個單詞出現的次數大於N/2,怎麼樣才能快速找出這個單詞? 
    點評:仍是老題,參見:http://blog.csdn.net/v_july_v/article/details/6890054
    大衆點評前面還有30道邏輯題,15道文字推理,15道數學推理,一共只給20min。
  2. 9月28日,網易筆試題:
    一、英雄升級,從0級升到1級,機率100%。
    從1級升到2級,有1/3的可能成功;1/3的可能停留原級;1/3的可能降低到0級;
    從2級升到3級,有1/9的可能成功;4/9的可能停留原級;4/9的可能降低到1級。
    每次升級要花費一個寶石,無論成功仍是停留仍是降級。
    求英雄從0級升到3級平均花費的寶石數目。
    點評:題目的意思是,從第n級升級到第n+1級成功的機率是(1/3)^n(指數),停留原級和降級的機率同樣,都爲[1-(1/3)^n]/2)。
    二、將一個很長的字符串,分割成一段一段的子字符串,子字符串都是迴文字符串。
    有迴文字符串就輸出最長的,沒有迴文就輸出一個一個的字符。
    例如:
    habbafgh
    輸出h,abba,f,g,h。
    點評:編程藝術第十五章有這個迴文問題的解答,參見:http://blog.csdn.net/v_july_v/article/details/6712171。此外,通常的人會想到用後綴數組來解決這個問題,其他更多的方法請見:http://dsqiu.iteye.com/blog/1688736。最後,還能夠看下這個連接:http://www.51nod.com/question/index.html#!questionId=672
  3. 10月9日,騰訊一面試題:
    有一個log文件,裏面記錄的格式爲:
        QQ號:    時間:     flag:
    如123456   14:00:00     0 
      123457   14:00:01     1
    其中flag=0表示登陸 flag=1表示退出
    問:統計一天平均在線的QQ數。 
    點評:相似於此文中:http://blog.csdn.net/hackbuteer1/article/details/7348968,第8題後的騰訊面試題,讀者能夠參看之。 
  4. 10月9日,騰訊面試題:
    1.有一億個數,輸入一個數,找出與它編輯距離在3之內的書,好比輸入6(0110),找出0010等數,數是32位的。
    2.每一個城市的IP段是固定的,新來一個IP,找出它是哪一個城市的,設計一個後臺系統。
  5. 10月9日,YY筆試題:
    1 輸出一個字符串中沒有重複的字符。如「baaca」輸出「bac」。
    2 對於一個多叉樹,設計TreeNode節點和函數,返回先序遍歷狀況下的下一個節點。
    函數定義爲TreeNode* NextNode(TreeNode* node)
    3 分割字符串。
    對於一個字符串,根據分隔符seperator,把字符串分割,若是存在多個分隔符連在一塊兒,則當作一個分隔符。若是分隔符出如今" "符號之間,則不須要分割" "之間的字符。
    好比a++abc ,分隔符爲+,輸出a abc
    a+"hu+" 輸出a hu+
    a++"HU+JI 輸出a "HU JI。
    請根據上述需求完成函數:void spiltString(string aString,char aSeperator)。
  6. 10月9日,趕集網筆試
  7. 10月9日,阿里巴巴2013校園招聘全套筆試題(注:下圖中所標答案不表明標準答案,有問題,歡迎留言評論)

    上述第15題,填空:lower+ (upper-lower)/2
      lower mid upper
    0 6 12
    7 9 12
    7 7 8
    8 8 8
    比較4次
    上述第16題,解答以下圖所示:

    上述第17題,解答以下圖所示:

    1八、甲包8個紅球 2個藍球,乙包2個紅球 8個藍球。拋硬幣決定從哪一個包取球,取了11次,7紅4藍。注,每次取後還放進去,只拋一次硬幣。問選的是甲包的機率?
    點評:
    貝葉斯公式 + 全機率公式做答(參看連接:http://www.doc88.com/p-132711202556.html)。具體解答以下圖所示:

    注:上述第15~18的解答所有來自讀者Lei Lei來信給出的解答,他的博客地址是:http://blog.csdn.net/nwpulei,特此感謝。有任何問題,歡迎隨時討論&指正,同時,更歡迎其餘朋友也一塊兒來作這些題目(你的答案一經選用,我能夠根據你的要求,貼出你的我的主頁或微博地址或博客地址)。
    1九、已知一個n個元素的數組,第i個元素在排序後的位置在[i-k,i+k]區間,k<<n .讓你設計一個算法對數組排序,要求時間複雜度最小,O (nlogn)不得分,O(nk)得2分,以下圖所示:


    讀者twtsa毛遂自薦,這是他給出的上述第19~20題的我的題解:http://blog.csdn.net/twtsa/article/details/8055143。有任何問題,歡迎隨時討論&指正。
  8. 10月10日,暴風影音筆試:
    都是很是基礎的題目,這是其中一道:一個整數轉換成二進制後,問裏面有多少個1。
  9. 10月10日,2013亞馬遜在線筆試題目
    題目及參考答案請見這:http://blog.chinaunix.net/uid-26750075-id-3370694.html。(感謝讀者freeloki來信提供)。
  10. 10月10日人人網面試題
    第一面:
    一、(1)++i 和 i++,那個效率高?
      (2)++++i,i++++,哪一個是合法的?
      (3)實現int型的++i 和 i++操做。
    二、一段程序,求輸出。(考察靜態變量和模版類)

    1. int  g = 0;  
    2. template<typename T>  
    3. class B  
    4. {  
    5. public:  
    6.     int static fun()  
    7.     {  
    8.         static int value = ++g;  
    9.         return value;  
    10.     }  
    11. };  
    12.   
    13. int main()  
    14. {  
    15.     cout << B<int>::fun() << endl;  
    16.     cout << B<char>::fun() << endl;  
    17.     cout << B<float>::fun() << endl;  
    18.     cout << B<int>::fun() << endl;  
    19.     cout << B<long>::fun() << endl;  
    20.     return 0;  
    21. }  
    三、(1)實現二進制轉十進制。
    (2)若是有下面這種能直接求二進制轉十進制的代碼,是怎麼實現的?
            binary<1>::value;   // 結果爲1
            binary<11>::value;   // 結果爲3
    四、volatile、explicit、mutable表示的含義。
    五、求整形數組的一個子數組,使得該子數組全部元素的和的絕對值最大。
    六、(1)寫求單鏈表是否有環的算法。
    (2)若是有環,如何找出環的第一個結點。
    七、實現單例模式。
    二面:
    一、一個文本,一萬行,每行一個詞,統計出現頻率最高的前10個詞(詞的平均長度爲Len)。並分析時間複雜度。
    二、求數組中最長遞增子序列。
  11. 10月10日,網易2013校園招聘全套筆試題:
  12. 10月10日,網易,數據挖掘工程師:
    1,簡述你對數據與處理的認識;
    2,簡述你對中文分詞的理解,說明主要難點和經常使用算法;
    3,常見的分類算法有哪些;
    4,簡述K-MEANS算法;
    5,設計一個智能的商品推薦系統;
    6,簡述你對觀點挖掘的認識。
    點評:其它題目與上述第56題第一部分(http://blog.csdn.net/hackbuteer1/article/details/8060917)所述相同。
  13. 10月11日,阿里巴巴筆試部分題目:
    1. 甲乙兩我的上街,撿到一張10塊錢的購物卡,兩人就想出一個辦法來分配這張卡。兩個分別將本身出的價格寫在紙上,而後看誰出的價高就給誰,而且那個出價高的人要把出的錢給對方。如今甲有6塊錢,乙有8塊錢。問誰得到的錢多。(多選)
          A 甲多      B 乙多         C 同樣多       D 有可能出現有人賠錢的狀況
    2.  有一個怪物流落到一個荒島上,荒島上有n條鱷魚。每條鱷魚都有實力單獨吃掉怪物。可是吃掉怪物是有風險的,會形成體力值降低,而後會有可能被掉其餘鱷魚吃。問,最後那個怪物是危險的仍是安全的?
    3.  算法題:
    A[i]是一個有序遞增數組,其中全部的數字都不相等,請設計一種算法,求出其中全部的A[i]=i的數字並分析時間複雜度,不分析複雜度不得分。
    4.  大題
    你在瀏覽器中輸入網址:http://blog.csdn.net/v_JULY_v,按下回車鍵後,會發生什麼事情,請一一描述(20分)。包括瀏覽器,網絡,服務器等等發生的事情,及各項關鍵技術。
    點評:這樣的題考過不少次,參考答案以下圖所示:
  14. 10月11日,華爲一面:
    一、將一個普通的二叉樹轉換爲二叉排序樹?
    二、隨便寫一個排序算法。
  15. 10月11日,完美筆試題:
    1.爲何析構函數應該設爲虛函數
    2.大數字乘法問題
    3.雙向鏈表模擬隊列操做push pop find
    4.求 a/3 不能用除法
    5.多核下多線程同步問題,使用鎖應該注意什麼
    6.三個寶箱有一個裏面有珠寶,如今拿第一寶箱,而後打開第二個寶箱後發現沒有珠寶,用機率論原理解釋爲何如今拿第三個寶箱,裏面有珠寶的機率比拿第一個寶箱高。
  16. 10月11日,搜狐暢遊旗下第七大道筆試題:
    算法題
      1.一個數是不是另外一個數的平方。
      2.N進制換成M進制 
      3.設計一個大數乘法     
    綜合題
      1.N個數,出棧有幾種狀況 
      2.進程死鎖緣由及條件.
  17. 騰迅一個很是有意思的面試題:
    N個數組,每一個數組中的元素都是遞增的順序,如今要找出這N個數組中的公共元素部分,如何作? 注:不能用額外輔助空間。 
    點評:
    討論了半天:http://weibo.com/1580904460/z08mT0aFj,沒個好的結果,發現仍是上午想到的N個指針逐步向後移動,輔以二分,而後N路歸併更靠譜,相似這裏的第5題所述的辦法:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/17/2593224.html。若讀者有更好的思路,歡迎賜教。
  18. 10月12日,迅雷2013校園招聘「廣州站」C++方向全套筆試題
    (注:若照片看不清楚,請右鍵點擊「圖片另存爲」到桌面,而後再打開圖片,即可以隨意放大縮小圖片拉)
  19. 10月12日晚,微策略北京站筆試題(根據讀者回憶整理):
    一、魔術定義:整數N以基數B表示,如21以基數3表示爲210,那麼21是基數3的一個魔術,210三個位的值都不同。設計函數,輸入參數N和B(B介於2到10之間),返回是否爲魔術。
    二、斐波那契數列的變形,一個賊每次上樓梯1或者2,一個27層的樓梯須要多少種方法,記住賊不能通過5,8,13層,不然會被抓住。點評:仍是能夠用斐波那契來推算,f(n) = f(n-1) + f(n-2),只是f(5) f(8) f(13) = 0,http://www.51nod.com/answer/index.html#!answerId=596
    三、給定一棵樹根節點,每一個節點裏面的值都不相同,查找iKEY的節點,並使用一個給定的節點將查找到的節點替換掉。節點內有兩個孩子節點和一個父節點。
    四、字符串數組S,全是0和1表示的,字符串都是n位的,且1的個數小於等於l,返回index的字符串。(這個比較奇怪,若是S中字符串都是符合1的個數小於等於l,則直接能夠獲得index的字符串啊,難道是要先求這個字符串數組?那就比較麻煩了)
    五、降序排列的數組,找到其中兩個不一樣的值,其乘積最接近一個給定的值M,感受和加法求和很相似。
    六、序列123...N,N介於3和9之間,在其中加入+-或者空格,使其和爲0,
    如123456  1-2 3-4 5+6 7 等價於1-23-45+67=0。請問,如何得到全部組合?
  20. 10月12日,大衆點評筆試一題:
  21. 讀者私信,昨日(12號)美團的筆試題:
    一、一副撲克52張(去了大小王),洗牌,求最頂一張和最底一張是A的機率
    二、知道兩個數的異或以及這兩個數的和,問能夠肯定這對數嗎?爲何?給出推理過程
    三、A、B兩個文件各存50億個商品名稱,每一個50個字符,求這兩個文件中相同名稱的商品名,內存限制4G(看過您的《教你如何迅速秒殺掉:99%的海量數據處理面試題》中的第6題,無壓力,很是感謝)
    四、給一個二叉樹的後序遍歷和中序遍歷,畫出這顆二叉樹,寫出前序遍歷結果,並給出推理過程
    五、一個有序數組array,給一個數x,可重複,求這個數在array中出現的區間,算法思路和代碼實現
    六、一個映射文件中存了ip地址區間和城市名稱,形如:
    10.0.0.1 10.0.1.27 北京
    10.0.2.1 10.0.2.27 北京
    201.0.1.12 201.0.2.124 上海
    給你一個ip地址,獲取城市名稱,要求:1)給出算法思想 2)代碼實現。
  22. 10月12日晚,360 2013校招部分筆試題(注:圖中所標答案不表明正確答案):

    int main() 
    {
    fork()||fork();
    return 0;
    }
    問,上述程序建立了幾個進程?

    編程題、傳教士人數m,野人c,m≥c,開始都在岸左邊,
    ①船隻能載兩人,傳教士和野人都會划船,固然必須有人划船
    ②兩岸邊保證野人人數不能大於傳教士人數   
    把全部人都送過河,設計一方案,要求編程實現。 
    點評:
    讀者huangxy10於本文評論下第169樓提供了一種解法:http://blog.csdn.net/huangxy10/article/details/8066408。再附一個討論帖子:http://topic.csdn.net/u/20121012/22/70226713-A669-4F03-80B7-BFFF12A330EB.html
  23. 10月13日,百度2013校招北京站筆試題:
    1、簡答題(30分) 
    一、用簡單語句描述數據庫操做的步驟 
    二、寫出TCP/IP的四層結構 
    三、什麼是MVC結構,並描述各層結構的做用 
    2、算法與程序設計題(40分) 
    一、字母a-z,數字0-9,現須要其中任意3個做爲密碼,請輸出全部可能組合。(僞碼\C\C++\JAVA)(10分) 
    點評:如本文評論下第198樓所述,即從26+10=36個不一樣字符中選取3個字符的組合,用遞歸及非遞歸兩種方法,能夠參照如下連接:
    http://blog.csdn.net/wumuzi520/article/details/8087501(從n個數中選取m個數的組合數),主要代碼以下:
    1. //copyright @wumuzi520  
    2. //從n個數中選取m個數的組合數  
    3. void Combination(int arr[], int nLen, int m, int out[], int outLen)    
    4. {    
    5.     if(m == 0)    
    6.     {    
    7.         for (int j = 0; j < outLen; j++)    
    8.         {    
    9.             cout << out[j] << "\t";    
    10.         }    
    11.         cout << endl;    
    12.     
    13.         return;    
    14.     }    
    15.     
    16.     for (int i = nLen; i >= m; --i)  //從後往前依次選定一個    
    17.     {    
    18.         out[m-1] = arr[i-1]; //選定一個後    
    19.         Combination(arr,i-1,m-1,out,outLen); // 從前i-1個裏面選取m-1個進行遞歸    
    20.     }    
    21. }    
    22.     
    23. void PrintCombination(int arr[], int nLen, int m)    
    24. {    
    25.     int* out = new int[m];    
    26.     Combination(arr,nLen,m,out,m);    
    27.     delete [] out;    
    28. }    
    二、實現字符串反轉函數(10分) 
    三、給定字符函數a、插入 b、刪除 c、替換 
    例如字符串A=acegf,字符串B=adef,最少須要2步操做將A轉換爲B,
    即第一步將c替換爲d,第二步將g刪除; 
    (1)請問將字符串A=gumbo轉換爲字符串B=gambol,最少須要幾步操做,列出如何操做(2分) 
    (2)任意字符串A和字符串B,如何計算最小操做次數,計算思路,並給出遞歸公式(3分) 
    (3)實現代碼(注意代碼風格與效率)(15分) 
    點評:請參看上文第38題第4小題:9月26日,百度一二面試題。
    3、系統設計題(30分)
    RSA SecurID安全系統 
    應用場景:這是一種用戶登陸驗證手段,例如銀行登陸系統,這個設備顯示6位數字,每60秒變一次,再通過服務器認證,經過則容許登陸。問How to design this system? 
    1)系統設計思路?服務器端爲什麼能有效認證動態密碼的正確性? 
    2)若是是千萬量級永固,給出系統設計圖示或說明,要求子功能模塊劃分清晰,給出關鍵的數據結構或數據庫表結構。 
    考慮用戶量級的影響和擴展性,用戶密碼的隨機性等,若是設計系統以支持這幾個因素. 
    3)系統算法升級時,服務器端和設備端可能都要有所修改,如何設計系統,可以使得升級過程(包括可能的設備替換或重設)儘可能平滑?
  24. 10月13日,百度移動開發筆試題
    1、 一、什麼是RISC;
    二、經過後序、中xu求前序 
    三、重寫與重載的區別 
    2、 
    一、反轉鏈表
    二、判斷兩個數組中是否有相同的數字 
    三、1000瓶水中找 出有毒的那瓶,毒性一週後發做,一週內最少須要多少隻老鼠 
    3、系統設計 email客戶端,支持多帳戶和pop3等協議 
      一、請寫出可能的至少5個用例; 
      二、使用sqlite存儲賬戶、已收信息、已發信息、附件、草稿,請設計合理的表結構 
      三、pop3等協議等接口已完成,請給出email客戶端的模塊設計圖。
  25. 10月13日,人搜2013 校招北京站部分筆試題(讀者回憶+照片):

     1,二重歌德巴赫猜測
    全部大於等於6的偶數均可以表示成兩個(奇)素數之和。
    給定1-10000,找到能夠用兩個素數之和表示每個偶數的兩個素數,而後輸出這兩個素數,若是有多對,則只須要輸出其中之一對便可。
    要求:複雜度較低,代碼可運行。
    2,城市遍歷
    某人家住北京,想去青海玩,可能會通過許多城市,
    現已知地圖上的城市鏈接,求通過M個城市到達青海的路線種類。
    城市能夠屢次到達的,好比去了天津又回到北京,再去天津,即爲3次。北京出發不算1次。
    輸入:
    N  M  S
        N爲城市總數,北京爲0,青海爲N-1;
        M爲通過的城市數目;
        S爲以後有S行
    i  j
        表示第i個城市能夠去第j個城市,是有方向的。
    輸出:
    N
        表示路徑種類。
    3,分佈式系統設計
    有1000億個URL,其中大約有5億個site。天天的更新大約2%-5%。設計一個系統來解決存儲和計算下面三個問題。可用分佈式系統。
    URL:http///site[port]*(key==?;key==?)
    site:[*].domain
      URL:http://www.baidu.com/baidu?word=%E5%AE%A3%E8%AE%B2%E4%BC%9A&ie=utf-8
      site::www.baidu.com
    domain::baidu.com
    key=baidu?word
        a>檢測每一個域名下的site數目,以及每一個site下的URL數目,輸出site變化超過必定閾值的域名以及URL數目變化劇烈的site。找出泛域。
    泛域:該域下的site數目超過500個,且每一個site下的URL數目超過100個。
        b>提取URL中key的特徵,對site進行聚類;
    (每一個site下面有多個URL,這些URL中有許多key,能夠獲取這些key做爲site的特徵,對site進行聚類,不過這應該是多機器聯合的)
        c>對於給定的domain,輸出該domain下的全部site。 
  26. 10月13日,創新工場筆試:
    第一個,快排最壞狀況下是O(n^2),問如何優化?
    第二個,怎麼樣求一個數的根號
    點評:你是否是會想到一系列有關數學的東西,什麼泰勒級數啊,什麼牛頓法啊,具體編程能夠以下代碼所示:
    1. static void Main(string[] args)  
    2. {  
    3.     double k = 5;  
    4.     double n = 2,  m = k;  
    5.   
    6.     while (n != m)  
    7.     {  
    8.         m = k / n;  
    9.         n = (m + n) / 2;  
    10.     }  
    11. }  
    連接:http://www.51nod.com/question/index.html#!questionId=660
    第三個,4個數字,用四則元素求結果可否爲24。寫出這個判斷的函數。
  27. 10月14日,思科網訊旗下公司筆試題:
    一、海量數據中,尋找最小的k個數。
    請分狀況,給出時間複雜度最優,或空間複雜度最優的方案,或時間複雜度/空間複雜度綜合考慮的可行方案。
    點評:參見:第三章、尋找最小的k個數
    二、有兩座橋,其中一座多是壞的,兩個守橋人分別守在這兩座橋的入口。他們一個老是會說實話,一個老是說謊言。
    你如今須要找出哪一座橋能夠經過。
    1),請問最少須要問守橋人幾個問題,能夠找出能夠經過的橋?如何問?
    2),請編程解決。
  28. 10月14日,騰訊杭州站筆試題:
    一、http服務器會在用戶訪問某一個文件的時候,記錄下該文件被訪問的日誌,網 站管理員都會去統計天天每文件被訪問的次數。寫一個小程序,來遍歷整個日誌 文件,計算出每一個文件被訪問的訪問次數
        1)請問這個管理員設計這個算法
        2)該網站管理員後來加入騰訊從事運維工做,在騰訊,單臺http服務器不夠用的 ,一樣的內容,會分佈在全國各地上百臺服務器上。每臺服務器上的日誌數量, 都是以前的10倍之多,天天服務器的性能更好,以前他用的是單核cpu,如今用的 是8核的,管理員發如今這種的海量的分佈式服務器,基本無法使用了,請從新設計一個算法。
    二、騰訊的qq遊戲當中,最多人玩的遊戲就是鬥地主了,每一句遊戲開始時,服務 器端都要洗牌,以保證發牌的時每一個人拿的牌都是隨機的,假設用1-54來表示54 張不一樣的拍,請你寫一個洗牌算法,保證54張牌能隨機打散!
    選擇題:
    1)、下列RAID技術沒法提升可靠性的是:
    A:RAID0   B:RAID1  C:RAID10  D:RAID5
    2)、長度爲1的線段,隨機在其上選擇兩點,將線段分爲三段,問這3個字段能組成一 個三角形的機率是:
    1/2,1/3,1/4,1/8
    3)、下面那種標記的包不會在三次握手的過程當中出現()
    A:SYN B:PSH C:ACK D:RST
  29. 10月14日,搜狗2013 校招筆試題:
    一、有n*n個格子,每一個格子裏有正數或者0,從最左上角往最右下角走,只能向下和向右,一共走兩次(即從左上角走到右下角走兩趟),把全部通過的格子的數加起來,求最大值SUM,且兩次若是通過同一個格子,則最後總和SUM中該格子的計數只加一次。
    點評:@西芹_new,一共搜(2n-2)步,每一步有四種走法,考慮不相交等條件能夠剪去不少枝,代碼以下「http://blog.csdn.net/huangxy10/article/details/8071242」:
    1.  西芹_new<huangxy10@qq.com>  0:55:40  
    2. // 10_15.cpp : 定義控制檯應用程序的入口點。  
    3. //  
    4.   
    5. #include "stdafx.h"  
    6. #include <iostream>  
    7. using namespace std;  
    8.   
    9. #define N 5  
    10. int map[5][5]={  
    11.     {2,0,8,0,2},  
    12.     {0,0,0,0,0},  
    13.     {0,3,2,0,0},  
    14.     {0,0,0,0,0},  
    15.     {2,0,8,0,2}};  
    16. int sumMax=0;  
    17. int p1x=0;  
    18. int p1y=0;  
    19. int p2x=0;  
    20. int p2y=0;  
    21. int curMax=0;  
    22.   
    23. void dfs( int index){  
    24.     if( index == 2*N-2){  
    25.         if( curMax>sumMax)  
    26.             sumMax = curMax;  
    27.         return;  
    28.     }  
    29.   
    30.     if( !(p1x==0 && p1y==0) && !(p2x==N-1 && p2y==N-1))  
    31.     {  
    32.         if( p1x>= p2x && p1y >= p2y )  
    33.             return;  
    34.     }  
    35.   
    36.     //right right  
    37.     if( p1x+1<N && p2x+1<N ){  
    38.         p1x++;p2x++;  
    39.         int sum = map[p1x][p1y]+map[p2x][p2y];  
    40.         curMax += sum;  
    41.         dfs(index+1);  
    42.         curMax -= sum;  
    43.         p1x--;p2x--;  
    44.     }  
    45.   
    46.     //down down  
    47.     if( p1y+1<N && p2y+1<N ){  
    48.         p1y++;p2y++;  
    49.         int sum = map[p1x][p1y]+map[p2x][p2y];  
    50.         curMax += sum;  
    51.         dfs(index+1);  
    52.         curMax -= sum;  
    53.         p1y--;p2y--;  
    54.     }  
    55.   
    56.     //rd  
    57.     if( p1x+1<N && p2y+1<N ) {  
    58.         p1x++;p2y++;  
    59.         int sum = map[p1x][p1y]+map[p2x][p2y];  
    60.         curMax += sum;  
    61.         dfs(index+1);  
    62.         curMax -= sum;  
    63.         p1x--;p2y--;  
    64.     }  
    65.   
    66.     //dr  
    67.     if( p1y+1<N && p2x+1<N ) {  
    68.         p1y++;p2x++;  
    69.         int sum = map[p1x][p1y]+map[p2x][p2y];  
    70.         curMax += sum;  
    71.         dfs(index+1);  
    72.         curMax -= sum;  
    73.         p1y--;p2x--;  
    74.     }  
    75. }  
    76.   
    77. int _tmain(int argc, _TCHAR* argv[])  
    78. {  
    79.     curMax = map[0][0];  
    80.     dfs(0);  
    81.     cout <<sumMax-map[N-1][N-1]<<endl;  
    82.     return 0;  
    83. }  
    @綠色夾克衫:跟這個問題:http://www.51nod.com/question/index.html#!questionId=487 ,是同一個問題。
       1、用動態規劃能夠求解,大概思路就是同時DP 2次所走的狀態。先來分析一下這個問題,爲了方便討論,先對矩陣作一個編號,且以5*5的矩陣爲例(給這個矩陣起個名字叫M1):
    M1
    0 1 2 3 4
    1 2 3 4 5
    2 3 4 5 6
    3 4 5 6 7
    4 5 6 7 8
      從左上(0)走到右下(8)共須要走8步(2*5-2)。爲了方便討論,咱們設所走的步數爲s。由於限定了只能向右和向下走,所以不管如何走,通過8步後(s = 8)都將走到右下。而DP的狀態也是依據所走的步數來記錄的。
      再來分析一下通過其餘s步後所處的位置,根據上面的討論,能夠知道通過8步後,必定處於右下角(8),那麼通過5步後(s = 5),確定會處於編號爲5的位置。3步後確定處於編號爲3的位置......。s = 4的時候,處於編號爲4的位置,對於方格中,共有5(至關於n)個不一樣的位置,也是全部編號中最多的。推廣來講n*n的方格,總共須要走2n - 2步,當s = n - 1時,編號爲n個,也是編號最多的。
      若是用DP[s,i,j]來記錄2次所走的狀態得到的最大值,其中s表示走s步,i表示s步後第1次走所處的位置,j表示s步後第2次走所處的位置。
    爲了方便討論,再對矩陣作一個編號(給這個矩陣起個名字叫M2):
     
    M2
    0 0 0 0 0
    1 1 1 1 1
    2 2 2 2 2
    3 3 3 3 3
    4 4 4 4 4
     
    M1
    0 1 2 3 4
    1 2 3 4 5
    2 3 4 5 6
    3 4 5 6 7
    4 5 6 7 8
      通過6步後,確定處於M1中編號爲6的位置。共有3個編號爲6的,分別對應M2中的2 3 4。假設第1次通過6步走到了M2中的2,第2次通過6步走到了M2中的4,DP[s,i,j] 則對應 DP[6,2,4]。因爲s = 2n - 2,0 <= i<= <= j <= n,因此這個DP共有O(n^3)個狀態。
    M1
    0 1 2 3 4
    1 2 3 4 5
    2 3 4 5  6
    3 4 5  7
    4 5 6 7 8
      再來分析一下狀態轉移,以DP[6,2,3]爲例(就是上面M1中加粗的部分),能夠到達DP[6,2,3]的狀態包括DP[5,1,2],DP[5,1,3],DP[5,2,2],DP[5,2,3],加粗表示位置DP[5,1,2]    DP[5,1,3]    DP[5,2,2]    DP[5,2,3] (加紅表示要達到的狀態DP[6,2,3])
    0 1 2 3 4    0 1 2 3 4    0 1 2 3 4    0 1 2 3 4
    1 2 3 4  5    1 2 3 4  5    1 2 3 4 5    1 2 3 4 5
    2 3 4  6    2 3 4 5 6    2 3 4  6    2 3 4  6
    3 4 5 6 7    3 4  6 7    3 4 5 6 7    3 4  6 7
    4 5 6 7 8    4 5 6 7 8    4 5 6 7 8    4 5 6 7 8
      所以,DP[6,2,3] = Max(DP[5,1,2] ,DP[5,1,3],DP[5,2,2],DP[5,2,3]) + 6,2和6,3格子中對應的數值    (式一) 
       二、上面(式一)所示的這個遞推看起來沒有涉及:「若是兩次通過同一個格子,那麼該數只加一次的這個條件」,討論這個條件須要換一個例子,以DP[6,2,2]爲例。
      DP[6,2,2]能夠由DP[5,1,1],DP[5,1,2],DP[5,2,2]到達,但因爲i = j,也就是2次走到同一個格子,那麼數值只能加1次。
      因此當i = j時,DP[6,2,2] = Max(DP[5,1,1],DP[5,1,2],DP[5,2,2]) + 6,2格子中對應的數值                    (式二)
       三、故,綜合上述的(式一),(式二)最後的遞推式就是
    if(i != j)
        DP[s, i ,j] = Max(DP[s - 1, i - 1, j - 1], DP[s - 1, i - 1, j], DP[s - 1, i, j - 1], DP[s - 1, i, j]) + W[s,i] + W[s,j]
    else
        DP[s, i ,j] = Max(DP[s - 1, i - 1, j - 1], DP[s - 1, i - 1, j], DP[s - 1, i, j]) + W[s,i]
        其中W[s,i]表示通過s步後,處於i位置,位置i對應的方格中的數字。
      複雜度分析:狀態轉移最多須要統計4個變量的狀況,看作是O(1)的。共有O(n^3)個狀態,因此總的時間複雜度是O(n^3)的。空間上能夠利用滾動數組優化,因爲每一步的遞推只跟上1步的狀況有關,所以能夠循環利用數組,將空間複雜度降爲O(n^2)。
        OK,上述這個方法可能不算最優解法,但相對比較容易想一些。但願你們可以提供更好的想法,也歡迎你們補充程序。連接: http://www.51nod.com/answer/index.html#!answerId=598
    二、N個整數(數的大小爲0-255)的序列,把它們加密爲K個整數(數的大小爲0-255).再將K個整數順序隨機打亂,使得能夠從這亂序的K個整數中解碼出原序列。設計加密解密算法,且要求K<=15*N.
    若是是:
    1,N<=16,要求K<=16*N.
    2,N<=16,要求K<=10*N.
    3,N<=64,要求K<=15*N.
    點評:http://www.51nod.com/question/index.html#!questionId=659
  30. 人人網面試,只面一道題,要求5分鐘出思路,10分鐘出代碼
    面試題是:
    兩個無序數組分別叫A和B,長度分別是m和n,求中位數,要求時間複雜度O(m+n),空間複雜度O(1) 。
  31. 10月15日,網新恆天筆試題
    1.不要使用庫函數,寫出void *memcpy(void *dst, const void *src, size_t count),其中dst是目標地址,src是源地址。
    點評:下面是nwpulei寫的代碼:

    1. void* memcpy(void *dst, const void *src, size_t count)    
    2. {    
    3.     assert(dst != NULL);    
    4.     assert(src != NULL);    
    5.     unsigned char *pdst = (unsigned char *)dst;    
    6.     const unsigned char *psrc = (const unsigned char *)src;    
    7.    
    8.     assert(!(psrc<=pdst && pdst<psrc+count));    
    9.     assert(!(pdst<=psrc && psrc<pdst+count));    
    10.     
    11.     while(count--)    
    12.     {    
    13.         *pdst = *psrc;    
    14.         pdst++;    
    15.         psrc++;    
    16.     }    
    17.     return dst;    
    18. }  

    連接:http://blog.csdn.net/nwpulei/article/details/8090136
    2.給定一個字符串,統計一下哪一個字符出現次數最大。
    3.咱們不知道Object類型的變量裏面會出現什麼內容,請寫個函數把Object類型轉換爲int類型。

  32. 10月15日,Google 2013 校招全套筆試題:

    1.寫一個函數,輸出前N個素數,函數原型:void print_prime(int N); 不須要考慮整數的溢出問題,也不須要使用大數處理算法。
    2.長度爲N的數組亂序存放着0帶N-1.如今只能進行0與其餘數的swap操做,請設計並實現排序,必須經過交換實現排序。
    3.給定一個源串和目標串,可以對源串進行以下操做:
       1.在給定位置上插入一個字符
       2.替換任意字符
       3.刪除任意字符
    寫一個程序,返回最小操做數,使得對源串進行這些操做後等於目標串,源串和目標串的長度都小於2000。
    點評:
    一、此題反覆出現,如上文第38題第4小題9月26日百度一二面試題,10月9日騰訊面試題第1小題,及上面第69題10月13日百度2013校招北京站筆試題第二大道題第3小題,同時,還能夠看下這個連接:http://www.51nod.com/question/index.html#!questionId=662
    1. //動態規劃:  
    2.   
    3. //f[i,j]表示s[0...i]與t[0...j]的最小編輯距離。  
    4. f[i,j] = min { f[i-1,j]+1,  f[i,j-1]+1,  f[i-1,j-1]+(s[i]==t[j]?0:1) }  
    5.   
    6. //分別表示:添加1個,刪除1個,替換1個(相同就不用替換)。  
    二、補充:上述問題相似於編程之美上的下述一題「如下內容摘自編程之美第3.3節」:
    許多程序會大量使用字符串。對於不一樣的字符串,咱們但願可以有辦法判斷其類似程度。咱們定義了一套操做方法來把兩個不相同的字符串變得相同,具體的操做方法爲:
    1. 修改一個字符(如把「a」替換爲「b」);
    2. 增長一個字符(如把「abdd 」變爲「aebdd 」);
    3. 刪除一個字符(如把「travelling」變爲「traveling」)。
    好比,對於「abcdefg」和「abcdef 」兩個字符串來講,咱們認爲能夠經過增長/減小一個「g」的方式來達到目的。上面的兩種方案,都僅須要一次操做。把這個操做所須要的次數定義爲兩個字符串的距離,而類似度等於「距離+1」的倒數。也就是說,「abcdefg」和「abcdef」的距離爲1,類似度爲1 / 2 = 0.5。
    給定任意兩個字符串,你是否能寫出一個算法來計算出它們的類似度呢?
    這樣,很快就能夠完成一個遞歸程序,以下所示:
    1. Int CalculateStringDistance(string strA, int pABegin, int pAEnd,  
    2.    string strB, int pBBegin, int pBEnd)   
    3. {  
    4.      if(pABegin > pAEnd)  
    5.      {  
    6.           if(pBBegin > pBEnd)  
    7.                return 0;   
    8.           else  
    9.    
    10.                return pBEnd – pBBegin + 1;  
    11.      }  
    12.   
    13.      if(pBBegin > pBEnd)  
    14.      {  
    15.           if(pABegin > pAEnd)  
    16.                return 0;  
    17.           else  
    18.                return pAEnd – pABegin + 1;  
    19.      }  
    20.   
    21.      if(strA[pABegin] == strB[pBBegin])  
    22.      {  
    23.           return CalculateStringDistance(strA, pABegin + 1, pAEnd,  
    24.             strB, pBBegin + 1, pBEnd);  
    25.      }  
    26.      else  
    27.      {  
    28.           int t1 = CalculateStringDistance(strA, pABegin, pAEnd, strB,   
    29.             pBBegin + 1, pBEnd);  
    30.           int t2 = CalculateStringDistance(strA, pABegin + 1, pAEnd,   
    31.             strB,pBBegin, pBEnd);  
    32.           int t3 = CalculateStringDistance(strA, pABegin + 1, pAEnd,  
    33.             strB,pBBegin + 1, pBEnd);  
    34.           return minValue(t1,t2,t3) + 1;  
    35.      }  
    36. }  

    上面的遞歸程序,有什麼地方須要改進呢?在遞歸的過程當中,有些數據被重複計算了。好比,若是開始咱們調用CalculateStringDistance(strA,1, 2, strB, 1, 2),下圖是部分展開的遞歸調用。

    能夠看到,圈中的兩個子問題被重複計算了。爲了不這種沒必要要的重複計算,能夠把子問題計算後的解存儲起來。如何修改遞歸程序呢?仍是DP!請看此連接:http://www.cnblogs.com/yujunyong/articles/2004724.html
    三、此外,關於這個「編輯距離」問題的應用:搜索引擎關鍵字查詢中拼寫錯誤的提示,能夠看下這篇文章:http://www.ruanyifeng.com/blog/2012/10/spelling_corrector.html。「關於什麼是「編輯距離」:一個快速、高效的Levenshtein算法實現,這個是計算兩個字符串的算法,Levenshtein距離又稱爲「編輯距離」,是指兩個字符串之間,由一個轉換成另外一個所需的最少編輯操做次數。固然,次數越小越類似。這裏有一個BT樹的數據結構,挺有意思的:http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees
    最後,Lucene中也有這個算法的實現(我想,通常的搜索引擎通常都應該會有此項拼寫錯誤檢查功能的實現):http://www.bjwilly.com/archives/395.html
    四、擴展:面試官還能夠繼續問下去:那麼,請問,如何設計一個比較兩篇文章類似性的算法?(這個問題的討論能夠看看這裏:http://t.cn/zl82CAH

    BTW,羣友braveheart89也整理了這套筆試題:http://blog.csdn.net/braveheart89/article/details/8074657
  33. 10月16日,UC的筆試題目:
    一、有個長度爲2n的數組{a1,a2,a3,...,an,b1,b2,b3,...,bn},但願排序後{a1,b1,a2,b2,....,an,bn},要求時間複雜度o(n),空間複雜度0(1)。
    點評:@綠色夾克衫:完美洗牌問題「關於洗牌算法:http://blog.csdn.net/gogdizzy/article/details/4917488」,解決這個問題的關鍵在於如何解決置換羣中的環。方法是微軟員工那篇論文中寫的:http://user.qzone.qq.com/414353346/blog/1243343118#!app=2&via=QZ.HashRefresh&pos=1243343118,大概意思是,用3的冪來弄:

    @方程:
    1. int index = arr.length / 2;  
    2. int temp = arr[index];  
    3. while(index != 1){  
    4.     int tempIndex = (index + (index % 2) * (arr.length - 1)) / 2;  
    5.     arr[index] = arr[tempIndex];  
    6.     index = tempIndex;  
    7. }  
    8. arr[1] = temp;  
    連接:1,http://www.51nod.com/question/index.html#!questionId=278;二、這裏也有一參考答案:http://blog.csdn.net/yuan8080/article/details/5705567
  34. 10月17日,創新工場電話面試:
    1,如何刪除一個搜索二叉樹的結點;
    2,如何找到一個數組中的兩個數,他們的和爲0;
    3,如何判斷兩條二維平面上的線段是否相交。
  35. 網易2013 校招筆試題:

  36. 10月19日,百度研發三面題:
    百度地圖裏的路線查詢:給定兩個站點,若是沒有直達的路線,如何找到換乘次數最少的路線?
    點評:螞蟻算法?仍是廣搜,或A*算法? 
  37. 10月20日,baidu廣州站筆試算法題: 
    1. 有一箱蘋果,3個一包還剩2個,5個一包還剩3個,7個一包還剩2個,求N個知足以上條件的蘋果個數。
    2. 用遞歸算法寫一個函數,求字符串最長連續字符的長度,好比aaaabbcc的長度爲4,aabb的長度爲2,ab的長度爲1。
    3. 假設一個大小爲100億個數據的數組,該數組是從小到大排好序的,如今該數組分紅若干段,每一個段的數據長度小於20「也就是說:題目並無說每段數據的size 相同,只是說每一個段的 size < 20 而已」,而後將每段的數據進行亂序(即:段內數據亂序),造成一個新數組。請寫一個算法,將全部數據從小到大進行排序,並說明時間複雜度。
    點評:
    思路1、如@四萬萬網友所說:維護一個20個元素大小的小根堆,而後排序,每次pop取出小根堆上最小的一個元素(log20),而後繼續遍歷原始數組後續的(N-20)個元素,總共pop (N-20)次20個元素小根堆的log20的調整操做。
    思路二@飄零蝦、若是原數組是a[],那麼a[i+20]>=a[i]恆成立(由於每段亂序區間都是小於20的,那麼向後取20,必然是更大的區間的元素)。
    第一個數組:取第0、20、40、60、80...
    第二個數組:取第一、2一、4一、6一、81...
    ...
    第20個數組:取第1九、3九、5九、79...     (上述每一個數組100億/20 個元素)
    共計20個數組,每一個數組100億/20 個元素「注:這5億個元素已經有序,不須要再排序」,且這20個數組都是有序的,而後對這20個數組進行歸併,每次歸併20個元素。時間複雜度跟上述思路一同樣,也是N*logK(N=100億,K=20)。
    此外,讀者@木葉漂舟直接按每組20個排序,將排好的20個與前20個調整拼接,調整兩端接頭處的元素,寫了個簡單地demo: http://t.cn/zlELAzs。不過,複雜度有點高,目前來講中規中矩的思路仍是如上文中@四萬萬網友 所說思路一「@張瑋-marihees按照思路一:http://weibo.com/1580904460/z1v5jxJ9P,寫了一份代碼:http://codepad.org/T5jIUFPG,歡迎查看」。
  38. 10月21日,完美筆試算法題「同時,祝本身生日快樂!」:
    1. 請設計一個算法,當給出在2D平面中某個三角形ABC的頂點座標時能輸出位於該三角形內的一個隨機點(須要知足三角形內均勻隨機),無需寫出實現,只要能清楚地描述算法便可。
    2. 請本身用雙向鏈表實現一個隊列,隊列裏節點內存的值爲int,要求實現入隊,出隊和查找指定節點的三個功能。
    3. 實現一個無符號任意大整數的類,實現兩個無符號超大整數的乘法。
  39. 10月22日,CSR掌微電子筆試題:
    5.給定兩個字符串s1和s2,要求斷定s2是否可以被經過s1作循環移位(rotate)獲得字符串包含。例如,S1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。用僞代碼或流程圖敘述解法。
    點評:老題,相似:http://blog.csdn.net/v_JULY_v/article/details/6322882。其他題目見:http://blog.sina.com.cn/s/blog_3eb9f72801016llt.html
  40. 10月23日,去哪兒網筆試:
    1.將IPV4轉換成整數
    2.定義一個棧的數據結構,實現min函數,要求push,pop,min時間複雜度是0(1);
    點評:這是2010年整理的微軟100題的第2題,http://blog.csdn.net/v_JULY_v/article/details/6057286,答案見此文第2題:http://blog.csdn.net/v_JULY_v/article/details/6126406
    3.數組a[n]裏存有1到n的全部樹,除了一個數removed,找出這個missing的樹。
    4.找出字符串中的最長子串,要求子串不含重複字符,並分析時間複雜度。
  41. 10月28日,微軟三面題「順祝,老媽明天生日快樂!」:
    找一個點集中與給定點距離最近的點,同時,給定的二維點集都是固定的,查詢可能有不少次,時間複雜度O(n)沒法接受,請設計數據結構和相應的算法。
    相似於@陳利人:附近地點搜索,就是搜索用戶附近有哪些地點。隨着GPS和帶有GPS功能的移動設備的普及,附近地點搜索也變得煊赫一時。在龐大的地理數據庫中搜索地點,索引是很重要的。可是,咱們的需求是搜索附近地點,例如,座標(39.91, 116.37)附近500米內有什麼餐館,那麼讓你來設計,該怎麼作?
    點評:R樹「從B樹、B+樹、B*樹談到R 樹」仍是KD樹「從K近鄰算法、距離度量談到KD樹、SIFT+BBF算法」?

  42. 11月10日,百度筆試題:
    一、20個排序好的數組,每一個數組500個數,按照降序排序好的,讓找出500個最大的數。
    二、一在線推送服務,同時爲10萬個用戶提供服務,對於每一個用戶服務從10萬首歌的曲庫中爲他們隨機選擇一首,同一用戶不能推送重複的,設計方案,內存儘量小,寫出數據結構與算法。
  43. 從今天開始,在繼續整理筆試面試題的同時,將整理上面已經收錄的一系列筆試面試題的答案,歡迎諸君與我共同討論.思考.作之「參與的方式爲:你除了能夠直接評論在本文之下,你也能夠經過郵件:zhoulei0907@yahoo.cn或私信:http://weibo.com/julyweibo 給我,或本身寫一篇博文把連接發給我收錄,無任何語言限制」2012.10.19...

注意:

    請全部凡是已經在本文評論下show 出了你的代碼code(含思路)的朋友:「10.13日以前第一批:zhutou100hao,zzran,yuankangjian_2,caopengcs,iamzhaiwei,milo_zhang_bs, tpm0513, huangxy10,宇智波鼬,sos-phoenix,aini201,aini201,xsfrank,zz198808 ,Dracula777,li850221,ghostjay0216,a81895898,donghang0535, iamzhaiwei,fengchaokobe,umissmesomuch,believe3,aini201, liuliuliu11,qichi_bj」+ 「10月13日之後第2批: 杜,litaoye,smilearchery,jiadong1125,nwpulei,wumuzi520,..,儘快發「ID號+你在本文評論下作的題目的題號」到我郵箱「zhoulei0907@yahoo.cn」或者聯繫QQ:786 165 179,我會在儘快發給你 十五個經典算法研究的 可自行編輯修改的WORD文檔,或者直接轉發加羣下載獲得:http://weibo.com/1580904460/z4fqHcWDV,歡迎各位及其餘朋友們繼續參與,感謝諸位。

    本文評論下的全部代碼未經仔細驗證,若是讀者發現其中任何問題或錯誤,歡迎指正,經驗證後,我也會給你發送文檔,其餘此前經過私信或郵件或QQ發過我題目或答案的朋友們如若須要也請發郵件:「名字+ 原文中的題號」 給我以便傳送文檔。July、二零一二年十月十六日。

 


 

後記

    通過上面這麼多筆試面試題目的瞭解,你自會看到,除了少部分特別難的算法題,大部分都是考察的基礎,故校招筆試面試的關鍵是你的80%的 基礎知識和編程實踐能力 + 20%的算法能力(特別強調算法能力的則此項比例加大)。
     最後,告訴諸位一個好消息,微軟面試100題系列(截取此文: http://blog.csdn.net/v_july_v/article/details/6543438第一部分編輯而成,共計11篇文章,300多道面試題)的PDF文檔近期已經制做出來,其下載地址爲: http://download.csdn.net/detail/v_july_v/4583815
    OK,以上的一切都是我喜歡且我樂意作的,我願同各位朋友享受這一切.(若是你身邊有正在參加校招/筆試/面試的朋友,歡迎把此文轉給他/她,舉手之勞,助人無限),謝謝。July,二零一二年九月。
 
updated
    近期九月十月的筆試面試題已經整理的差很少了,10月也即將過去,衷心祝願各位都能拿到滿意的offer,固然,若還能與我分享你的快樂,則再高興不過了!
    分享幾點體會:
  1. 編碼能力是你之後幹任何開發工做的基礎,剛開始時不要去糾結是否該去學算法,如果想幹開發,多coding就是了(如今,就把你的代碼評論到本文之下吧)!
  2. 找到你的興趣和熱愛之所在,它們會爲你指導一切!我搞研究即是瞎弄,幾乎沒有任何什麼學習方法,一切徹底憑藉興趣和熱愛!當你慢慢開始有獨立思考的意識時,你就知道一切該如何下手了!
 
 
原文地址:http://blog.csdn.net/v_july_v/article/details/7974418
相關文章
相關標籤/搜索