感謝陳立人http://weibo.com/lirenchen?topnav=1&wvr=5&topsug=1的天天一道面試題的資料整理。關注「待字閨中」的微信,裏面有題目的分析。我會post他整理的題目,供你們一塊兒學習。 面試
給定一批查詢日誌,數量爲n。其中,有的查詢出現多於n/3次,請在線性時間內,找到全部知足條件的查詢。 微信
我我的第一反應就是對其排序,或者map函數進行計數。效率通常。 函數
之前的面試題,有一道是說查找多於出現一半的查詢,簡單的方法就是遇見到兩個,若是兩個不一樣,就同時刪掉這兩個。一直刪掉最後,剩下的就是知足條件的。 post
其能夠繼續擴展,有的查詢出現多於n/m次,找到知足條件的查詢。
學習
有一種很巧妙的方法,其想法的實現就是俄羅斯方塊。 spa
用一個map函數將查詢對應到一個值。 日誌
例如:遇到如下查詢序列:
4,4,2,3,1,3,2,3,5,4
m=5,就是說那個map映射的個數等於5,填滿了一行,就消掉一行。 排序
先來了4,4,2,3這批查詢,分別填入map裏面。 ci
|
|
|
|
|
4 | |
|
|
|
4 | 2 | 3 | |
|
此時,來了5,map的映射個數已滿(爲5),因此能夠消掉一行。 get
|
|
3 | |
|
4 | 2 | 3 | |
|
4 | 2 | 3 | 1 | 5 |
|
|
|
|
|
|
|
3 | |
|
4 | 2 | 3 | |
|
這種方法十分高效,線性時間就能夠知足了。