又見Google搜尋之星;及須彌之境分析
今日面試題:又見Google搜尋之星
給定一批查詢日誌,數量為n。其中,有的查詢出現了多於n/3次,請線上性時間內,找到所有滿足條件的查詢。
須彌之鏡面試題分析
原題:
有k個有序的陣列,請找到一個最小的數字範圍。使得這k個有序陣列中,每個陣列都至少有一個數字在該範圍中。
例如:
1: 4, 10, 15, 24, 26 2: 0, 9, 12, 20 3: 5, 18, 22, 30
所得最小範圍為[20,24],其中,20在2中,22在3中,24在1中。
分析:
遇到一個題目,我們要通過分析找到突破口。這個題目的突破口是什麼呢?其實比較好找。就是“有序”,而且k個陣列都是有序的,那麼我們腦海裡就會浮現出各種可以嘗試的方法:可以對有序的陣列進行二分查詢、可以對多個有序的陣列進行歸併排序,生成一個有序的陣列等等。
那這個題目選擇哪個方法繼續嘗試呢?那我們再分析一下要解決的問題。找到一個最小的範圍,每一個有序陣列中,都至少有一個元素在這個範圍中。找到這樣一個範圍並不難,可是如何確定最小的範圍呢?最終得到的最小的範圍,至少包含三個元素,並且在所有陣列整體的排序中,是相鄰的。假設最小範圍是[a, b, c],a < b < c。 c-a是最小的。並且,a,b,c來自不同的有序陣列。還有一種情況是[a,b,d,c],a,b,c不是緊鄰的,中間有一個d即: a< d < c。這時,d只能是來自b所在的陣列,如下分析:
d來自a所在的陣列,那麼應有更短的範圍c - d
d來自c所在的陣列,那麼應有更短的範圍d - a
d來自b所在的陣列,範圍大小是不變的,就是無論是考慮d,還是考慮b。都沒有影響。
從上面的分析,我們得出,只需要考慮在最終的排序中,考慮鄰近的、並且來自不同有序陣列的元素,作為備選的範圍。那麼該怎麼樣做到只考慮臨近的、並且來自不同的有序陣列的元素呢?這裡就用到了歸併排序的思想。以原題中的例子為例,假設有三個指標指,p1,p2,p3,分別指向三個陣列的第一個元素:
步驟 | 指標當前值 | 最大值 | 最小值 | min_range_value | 移動指標 |
1 | 4,0,5 | 5 | 0 | 5 | p2 |
2 | 4,9,5 | 9 | 4 | 5 | p1 |
3 | 10,9,5 | 10 | 5 | 5 | p3 |
4 | 10,9,18 | 18 | 9 | 9 | p2 |
5 | 10,12,18 | 18 | 10 | 8 | p1 |
6 | 15,12,18 | 18 | 12 | 6 | p2 |
7 | 15,20,18 | 20 | 15 | 5 | p1 |
8 | 24,20,18 | 24 | 18 | 6 | p3 |
9 | 24,20,22 | 24 | 20 | 4 | p2 |
end |
結束是因為第二個陣列已經沒有元素可以再進行遍歷了。最終得到最小的min_range_value為4,即為題目例子的答案。
上面這個方法,通過歸併排序的思想,確保每次都是k個來自不同的陣列的元素進行比較,得到最大值、最小值。就可以得到一個範圍,包含了所有陣列中的數字。
這個題的著名變種是從網頁中產生包含所有查詢詞的最小的摘要。如果你 面過Google,你應該聽說過這題。
本文來自微信:待字閨中,2013-07-17釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 熟悉的陌生人;及又見Google搜尋之星分析Go
- 蓄水池抽樣及Google搜尋之星分析Go
- 須彌之鏡;及相差甚遠分析
- Google面試題搜尋之星和最多連續數的子集答案Go面試題
- 子序列;及又見排序分析排序
- Google搜尋大法Go
- Google搜尋API?GoAPI
- Google搜尋技巧Go
- 又見排序;及陣列和分析排序陣列
- 快速使用Google搜尋Go
- GOOGLE搜尋祕籍Go
- google搜尋語法Go
- Google推出面部搜尋Go
- 諷刺&Google搜尋APIGoAPI
- Google搜尋指令大全(最新整理)Go
- 黃了。Google中國版搜尋Go
- Google的個性化搜尋Go
- Google 按圖搜尋的原理Go
- 使用Google百度等搜尋引擎的常用搜尋技巧Go
- 轉:google搜尋聯盟與adsense搜尋廣告的區別Go
- Think with Google:印度搜尋洞察報告Go
- 如何使用GOOGLE高階搜尋技巧Go
- python抓取google搜尋結果PythonGo
- google圖書搜尋上線了~~Go
- 微軟挑戰Google 改道垂直搜尋微軟Go
- Google桌面搜尋:很好很強大!Go
- 常見檔案搜尋命令
- 深度優先搜尋(DFS)思路及演算法分析演算法
- 【JavaScript學習筆記】呼叫google搜尋JavaScript筆記Go
- google搜尋你想知道的東西Go
- Mashable:Google搜尋背後的資料Go
- 轉貼:google搜尋原理論文1Go
- google可以搜尋電子圖書了Go
- elasticsearch之拼音搜尋Elasticsearch
- js之搜尋框JS
- 搜尋引擎原理及使用
- Google:24%的美國旅行者通過搜尋引擎搜尋住宿資訊Go
- 搜尋模組功能分析