二分算法自白

大家好,我是二分算法,很多人最初接觸到算法時候最先認識的就是我。我呢,說難不難,說簡單也千萬不要大意。

什么,你問我是誰?

說到我為什么而來,昨天我和阿大玩了一個游戲,很好的詮釋了這個問題。這個游戲的規(guī)則很簡單,一個人在心中想一個1到100的數(shù)字,另一個人猜。猜的過程中,一方只能告訴另一方是大了還是小了。猜的次數(shù)最少的人獲勝。

第一局我心里想的數(shù)字是57,阿大就這樣,從1開始猜到了57,猜了57次。

第二局輪到我了,想想我可是二分查找算法,最擅長的是什么?就是查找啊,阿大這次輸定了,看我如何以最快的速度找到他心里想的數(shù)字。

第一次,我猜了個數(shù)字50,阿大告訴我小了。

第二次,我猜了個數(shù)字75,阿大告訴我大了。

第三次,我猜了個數(shù)字63,阿大告訴我大了。

第四次,我猜了個數(shù)字57,阿達告訴我對了。

他竟然和我想的數(shù)字是一個!狡詐。

可是我依然以巨大的差距贏得了阿大。

阿大感到不服氣,覺得是我運氣好,其實我只是做了一個我最擅長的事情而已——二分算法。

從一開始,我并不知道他心里想的數(shù)字是什么,我只猜最中間的數(shù)字50,這樣無論是大了還是小了,都會有一半的數(shù)字被50過濾掉,接下來,我從有效的一半數(shù)字中,再找中間的數(shù)字,又可以過濾掉一半的數(shù)字,直到找到這個數(shù)字為止,所以對于100個數(shù)字來說,我最多最多也只需要7次而已,

這比阿大的傻找真的少太多了,看看1000次呢,也最多只需要14次。

看了這個游戲,是不是覺得我很好了解?只需要滿足兩個條件就行了,

第一是一串有序的數(shù)。

第二一直找“中間”的數(shù)字,直到找到為止。

另外我也知道,在面試中,常常遇到的是給你一個數(shù)字,讓你把他找出來。這樣的代碼實現(xiàn)。

阿大說每次算法題,他都是背下來,然后讓寫什么就寫什么。這樣是很危險的,我比較單純簡單,但是遇到了我那些復雜的算法兄弟,稍微一變形,就把你考住了。

所以要寫算法代碼,最重要的就是把你理解算法的思路轉換成代碼執(zhí)行算法的思路。

現(xiàn)在我來舉個例子,有這樣的一串數(shù)字,已經(jīng)排好序了,如何能寫一段二分查找代碼找到35這個數(shù)字呢?

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容