數字遊戲;及螞蟻螞蟻分析
今日面試題:數字遊戲
盒子中有n張卡片,上面的數字分別為k1,k2,...,kn。你有4次機會,每抽一次,記錄下卡片上的數字,再將卡片放回盒子中。如果4個數字的和等於m。則你就贏得遊戲,否則就是輸。直覺上,贏的可能性太低了。請你給出程式,判斷是否有贏的可能性。儘量提高方法的效率。
====================================
螞蟻螞蟻分析
原題
n只螞蟻以每秒1cm的速度在長為Lcm的竿子上爬行。螞蟻爬到終點會掉下來。兩隻螞蟻相遇時,只能調頭爬回去。對於每一隻螞蟻i,給定其距離竿子左端的距離x[i],但是我們不知道螞蟻的初始朝向。計算,所有螞蟻掉落需要的最短時間和最長時間。
分析
根據題目描述,我們不知道螞蟻的初始朝向,所以兩種都有可能。此時,我們可以先固定第0個螞蟻的方向,然後再處理其他的螞蟻。這是一個遞迴的思路,並且每個螞蟻有兩個選擇,一共2^n種情況,計算每一種情況下,所有螞蟻掉落的時間,選擇最短的、最大的則得到答案。這個題目的時間複雜度是指數級的。真真有些高了,那麼如何改進呢?
我們在摘要中說道,這個題目其實是考察大家想象力的。想象力在哪裡呢?我們首先來看看最短時間的情況,直覺上來講,所有的螞蟻都超最近的一端走,是需要最短時間的。那麼這時,會不會發生碰撞呢?顯然是不能的,A和B是兩隻不同的螞蟻。
… | B | A | … |
假設A到左端近,距離為LA
下面考慮最長時間的情況,也是該發揮想象力的地方。當兩隻螞蟻相遇的時候,本來是要調頭爬回去的。這與直接交錯走過去有什麼不同呢?螞蟻的速度是一樣的。大家可以舉幾個具體的例子,看看這兩種情況,差別在哪裡。例如:
B | A |
* 當相遇調頭時,A和B都調下來的最長時間是4秒。A向左一格,然後調頭向右三格
* 當相遇交錯走過時,A向左走三格掉落,B向右走四格掉落。則最長時間為4秒。
這並不是巧合。可以認為是同樣的情況。主要的原因就是螞蟻的速度是相同的,可以認為是獨立的。這樣,求所有螞蟻都掉落的最長時間,就是找離某一端距離最長的螞蟻,然後向著這一端走,所需要的時間。演算法的時間複雜度為O(n)。
後面求最長時間的關鍵就是,發揮想象,找到調頭和交錯走過實際上是一樣的。就搞定了。
【分析完畢】
本文來自微信:待字閨中,2013-08-13釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 螞蟻螞蟻;及周長最長分析
- 螞蟻金服楊軍:螞蟻資料分析平臺的演進及資料分析方法的應用
- 阿里同意入股螞蟻金服33%股權 為螞蟻上市鋪路阿里
- 螞蟻轉崗面試之路面試
- 南非螞蟻技術社群
- 藍橋杯-螞蟻感冒
- 3.30螞蟻筆試筆試
- 螞蟻金服RPC框架結構分析RPC框架
- 【工作】螞蟻金服招DBA
- flash繪圖API :螞蟻線繪圖API
- 2024.08.28螞蟻
- 京東數科與螞蟻科技的IPO競賽
- 9.9螞蟻金服二三輪面試面試
- 如何在微信小程式上開發一個「螞蟻森林」和「螞蟻莊園」結合體?微信小程式
- [如何在微信小程式上開發一個「螞蟻森林」和「螞蟻莊園」結合體?](轉)微信小程式
- 入職阿里螞蟻三個月有感阿里
- 螞蟻金服 Service Mesh 深度實踐
- (螞蟻金服mPaaS)統一儲存
- [招聘] AFX · 螞蟻體驗技術部
- 螞蟻金服 Service Mesh 實踐探索
- 螞蟻部落Git教程簡單介紹Git
- 螞蟻金服技術長--程立
- canvas螞蟻線效果程式碼例項Canvas
- 軍蟻有望成就特種機器人,行軍打仗靠螞蟻?機器人
- 螞蟻數字科技業務出海新進展,在菲律賓釋出多款數字科技產品
- 螞蟻、位元組、滴滴面試經歷總結面試
- 螞蟻SOFA系列(1) - 聊聊SOFA的模組化
- 螞蟻金服!前端實習生!內推!提前批!前端
- 螞蟻金服面試經歷-前期準備面試
- 招聘貼:螞蟻金服招Java研發Java
- 招聘貼:螞蟻金服招前端開發前端
- 【北京】Golang技術專家--螞蟻金服Golang
- 樹莓派上使用螞蟻礦機挖礦樹莓派
- 招聘貼:螞蟻金服招Java研發及前端開發Java前端
- 網路螞蟻的廣告條如何實現和破解的! (74字)
- 【實習】螞蟻金服中介軟體實習生招聘
- leanote螞蟻雲筆記arm_server搭建筆記Server
- 螞蟻金服 DB Mesh 的探索與實踐