女人兄弟會背叛你,但數學不會,不會就是不會。
本篇主要提到二分查詢,以假設場景來帶你了解二分查詢的原理。
二分查詢是一種演算法,其輸入是乙個有序的元素列表(圈重點「有序」)。如果要查詢的元素包在列表中,二分查詢返回其位置,否則返回null。
可以先隨意想1~100的數字
我們要的目標是以最少的次數猜到這個數字,你每次猜測乙個結果,我會說大了、小了或者對了。
假如你從1開始依次向上猜,每次猜測都只能排除乙個數字。這在演算法裡屬於簡單查詢,更準確的說法是傻找。如果我想的是99,那要依次才99次,才能猜對。
打起精神來,開始講重點了
我有乙個更佳的猜法,比如我們從50開始,如果小了,但是至少可以排除一半的數字,然後我們繼續猜75,如果大了,那餘下的數字又可以排除一半!
在使用二分查詢時,你猜測的是中間的數字,從而每次都將餘下的數字排除一半。接下來猜63(50~75中間的數字)。這就是二分查詢。
所以不管想到那個數字,都能在7次以內猜到,因為每次猜到都將排除很多數字。
這就是二分查詢的原理。
本篇如有錯誤,請及時指出,馬上修改。
迭代二分查詢二分查詢
在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...
你真的了解二分查詢嗎?
基本框架 int binarysearch int nums,int target else if nums mid target else if nums mid target return 這個場景是最簡單的,肯能也是大家最熟悉的,即搜尋乙個數,如果存在,返回其索引,否則返回 1。int bin...
二分查詢超出時間限制
給大家分享一道leetcode題目 你是產品經理,目前正在帶領乙個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。假設你有 n 個版本 1,2,n 你想找出導致之後所有版本出錯的第乙個錯誤的版本。你可以通過呼...