七夕鵲橋;及數字遊戲分析
今日面試題:七夕鵲橋
有n對喜鵲。每一對可以表示為(x,y),x、y是喜鵲的編號,並且任意一對,x總是小於y。(c,d)可以連線在(a,b)之後,當且僅當b
=========================================
數字遊戲分析
原題
盒子中有n張卡片,上面的數字分別為k1,k2,...,kn。你有4次機會,每抽一次,記錄下卡片上的數字,再將卡片放回盒子中。如果4個數字的和等於m。則你就贏得遊戲,否則就是輸。直覺上,贏的可能性太低了。請你給出程式,判斷是否有贏的可能性。儘量提高方法的效率。
分析
這個題目,和之前Google的一個概率的題目是類似的,當然解決的方法也是類似的,思路大家可以找找前面的題目,不再贅述。
這個題目其實想和大家講一下思考問題、改進解法的思路。
這個題目最直接的方法就是四重迴圈遍歷,n^4的時間複雜度,比較恐怖,但確實一個很好的起點。不用覺得很丟人,只要我們持續改進即可。
假設a,b,c是k1到kn中的三個數字,是否存在d使得,a+b+c+d=m?d在k1到kn中。和題目中的意思是一樣的,變換等式如下:
d = m - a - b - c
如果滿足上式,就是說,要在k1到k2中查詢d,即:查詢m - a - b - c,找到就存在;找不到,就是不存在。查詢有線性查詢,二分查詢等。四重迴圈最內一層迴圈,可以認為是線性的查詢,如果想更快一些,可以應用二分查詢,而二分查詢需要k1到kn是排序的,則先對n個數字進行排序,時間複雜度O(nlogn)。然後最內一層迴圈,改為二分查詢,時間複雜度為O(n^3logn)。所以總的時間複雜度為O(n^3logn)。
經過上面的分析,我們可以得到啟發,既然可以提出一個d,那麼就可以再提出一個c。將a+b+c+d=m轉換為c+d=m-a-b。這樣,我們可以列舉k1到kn的兩個數的和,然後對n2個和,進行排序,時間複雜度為o(n^2logn)。然後遍歷n^2個和,設每一個和為pair,查詢是否存在m-pair,同樣二分查詢,時間複雜度為O(n^2logn)。總的時間複雜度為O(n^2logn)。
經過上面的層層分析,大家能否發現,對於演算法的持續改進,還是有一些竅門的,大家細心領悟。領悟得多了,必會有更大的進步。
這個題目其實解法比較多,出了上面介紹的,還有別的方法,比如應用一些資料結構。大家可以開動自己的腦筋,不斷的發散。不要為了完成一個題目而去思考。應該嘗試不同的思路,即使思路的時間、空間的複雜度並不好,但是隻要能夠分析清楚。這就是很大的進步。這些也是我們給大家介紹面試題的一個初衷。我們儘可能的將問題分析透徹,希望能夠給大家以啟迪。
【分析完畢】
本文來自微信:待字閨中,2013-08-14釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 模糊距離;及七夕鵲橋分析
- 七夕特別篇|用Python繪畫牛郎織女在鵲橋相見Python
- 數字遊戲;及螞蟻螞蟻分析遊戲
- 程式猿生存指南-62 鵲橋銀河
- 缺失的數字;及找數字分析
- 找數字續;及缺失的數字分析
- 格點數目;及兄弟數字分析
- 找數字;及最長等差數列分析
- 兄弟數字;及修理柵欄分析
- 重排陣列;及消失的數字分析陣列
- 括號匹配;及找數字續分析
- 數字遊戲遊戲
- 聚焦工業裝置智慧運維,雲洲扁鵲賦能行業數字化運維行業
- 猜數字遊戲遊戲
- Shell猜數字遊戲遊戲
- 猜數字小遊戲遊戲
- 【Java】——猜數字遊戲Java遊戲
- 誰來拯救數字遊戲?遊戲
- SSL 1653——數字遊戲遊戲
- Python 英文的月份轉數字及數字轉英文Python
- 關於數字藏品系統開發程式分析及玩法案例
- 歷屆試題 數字遊戲(數學)遊戲
- 消失的數字;及格點數目分析
- 使用者猜數字遊戲遊戲
- 填數字遊戲解題機遊戲
- CCG數字遊戲,誰主沉浮?遊戲
- 分析:中國數字出版現狀
- 突破!中小製造企業數字化轉型困境分析及對策
- 1082. 數字遊戲 (數位DP)遊戲
- 分析破解數字五筆3.0 (2千字)
- 數對數目;及LIS問題分析
- C#小遊戲-------猜數字 (轉)C#遊戲
- 【數字化】數字化轉型是什麼、為什麼、怎麼辦;2018年數字化供應鏈行業及案例分析報告行業
- 數字經濟到底是什麼?從社群團購分析數字化
- k個最小和;及數對數目分析
- 數字對映:數字孿生技術的應用場景及作用
- 區塊鏈數字資產交易所開發發展及平臺安全分析區塊鏈
- linux 網橋程式碼分析 二 網橋初始化Linux