Java演算法面試題(006) 相遇問題(阿里)
問題
本題來自阿里的面試,題目為:
有A,B兩個人在X軸上,分別在零點的兩側,你只能寫go_left(每次往左走一步),go_right(每次往右走一步),if_zero(判斷當前位置是不是零點),goto (程式的第幾行),這四個語句的程式,給A、B執行一樣的程式,讓他們相遇。
問題分析
首先我們做個假設,A位於零點的左側,B位於零點的右側。
拿到這個問題後,我相信大部分人的思維都是會做這樣的嘗試:試圖讓A往右走,B往左走,試圖編寫程式實現兩人的相遇。至少我也是做了這種嘗試,但沒有找到很好的方法來實現這個問題。如果有人實現了,煩請告訴我一下:)
但很快我轉變了思路,相遇的話,並不一定非要大家都往中間節點方向走,才能夠相遇;我們也可以往一個方向走,只是達到某個條件後,有一個人能夠實現加速,追趕位於前方的另外一個人。轉變思路後,很快就能給出答案。
實現及分析
下面是我的實現方案:
LABEL_1:
go_right
if_zero:
goto LABLE_2
not if_zero:
goto LABEL_1
LABLE_2:
go_right
go_right
not if_zero:
goto LABLE_2
開始的時候A、B同時往右走,由於B位於零點的右側,因此不會走到零點,它一直在執行LABEL_1和LABEL_2之間的程式碼;但是A位於零點的左側,在執行一段時間後,它會走到零點,此時的話,我們跳轉到LABEL_2的位置,然後一直執行LABEL_2之後的程式碼。
假設A、B執行相同的程式,執行每條語句的時間都一樣;由於A跳轉到LABEL_2標籤後,開始加速往前追趕,最終會和B相遇。
看到這裡,有木有腦洞大開的趕腳啊^_^
相關文章
- 阿里java面試題阿里Java面試題
- Java演算法面試題(009) 毒酒問題Java演算法面試題
- 阿里JAVA開發面試常問問題總結阿里Java面試
- Java演算法面試題(007) 蒙提霍爾問題(三門問題)Java演算法面試題
- java面試問題Java面試
- 最新阿里Java面試題,這些面試題你會嗎?阿里Java面試題
- 【006期】JavaSE面試題(六):泛型Java面試題泛型
- 阿里Jvm必問面試題及答案阿里JVM面試題
- 阿里面試Redis常考問題阿里面試Redis
- 【Java問題面試總結】Java面試
- Java面試必看二十問題Java面試
- google經典演算法面試題-雞蛋問題Go演算法面試題
- 阿里面試題阿里面試題
- 阿里金服最全java面試題及答案阿里Java面試題
- 阿里巴巴Java面試題錦集阿里Java面試題
- 4.21 阿里電話面試問題記錄阿里面試
- 阿里資深專家面試問題收集阿里面試
- 【Java面試題】如何回答GC相關問題Java面試題GC
- 阿里的面試官都喜歡問哪些問題?阿里面試
- 常見的Java面試問題Java面試
- 經典面試問題:12小球問題演算法(原始碼)面試演算法原始碼
- 演算法面試:陣列編碼面試問題演算法面試陣列
- Java面試常問的幾個問題Java面試
- 阿里歷年經典Java面試題彙總阿里Java面試題
- 【計題04組01號】Java面試問答題Java面試
- Java面試必問面試題,你掌握了嗎?Java面試題
- 阿里面試題(一)阿里面試題
- 40個Java集合面試問題和答案,面試奇葩問題,你掌握了嗎?Java面試
- 面試常考演算法題之並查集問題面試演算法並查集
- 2019 阿里java面試總結 (含面試題解析)阿里Java面試題
- 100道Java高頻面試題(阿里面試官整理)Java面試題阿里
- 阿里面試題BIO和NIO數量問題附答案和程式碼 java愛好者阿里面試題Java
- Java 進階面試問題必備Java面試
- Java面試技巧之MySQL問題梳理Java面試MySql
- Java同步問題面試參考指南Java面試
- java面試題Java面試題
- 面試問題面試
- 阿里的面試官都喜歡問哪些技術問題?阿里面試