作為log(n) search 方法的典型, binary search基本可以分為以下幾類
- search 準確number的
-search 最小differnece的
-search closest的,這個又可以分為略微小於和略微大於的。
search min or max
有重複的
非單項sorted的
下面逐個解說:
1. 準確number, 這個比較簡單,就是可以分為3中情況,mid等於,mid小於,mid大於。不贅述,具體code如下
publicbool binarysearch(int[,] matrix, int row, int target, int left, int
right)
幾個典型的題為
2.3.
first bad version.
publicint bs(int[,] matrix, int target, int left, int
right)
以找第乙個小於的值為例,幾個要點,首先需要判斷初始值符合不符合。比如最左邊的也大於,那最小值就是最左邊。
search過程中,conditional是left大於right而不是left大於等於right。這個的原因是因為存在left = n, right = n+1的情況,這種情況下mid永遠是n,這就要求我們必須在遞迴的時候必須mid加1或者減1。
比如找[1,4]中的第乙個小於2 的值,
left mid right mid的值小於target,那麼mid+1
0 0 1
1 1 1 這個時候如果判斷條件是left >= right, 則直接輸出為2,顯然是不對的。所以當left == right時候繼續判斷。大於target, 那麼mid-1
1 0 0 left大於right,所以說輸出left。
5. 每次先check左右是否重複,如果有重複的,那就left加1或者right-1,繼續binary search。
find minimum in rotated sorted array ii
publicint firstbadversion(int left, int
right)
6.find minimum in rotated sorted array
publicint findmin(int nums, int left, int
right)
search 2d matrix ii
binary search及相關總結
在程式設計珠璣和程式設計之美上都有討論,這篇部落格總結一下相關知識。最一般的binary search的遞迴和迭代如下 預設非空 include include include using namespace std 下面為遞迴和迭代兩種,思路相同,當有重複數字時,隨機的返回乙個index。int ...
深入學習BinarySearch
這個陣列是排序好的,這時我們就可以使用二分查詢去找這個數,我們可以選擇陣列中間的元素,這個中間元素會把陣列分成前後兩個相等的區間,如果我們要找的元素比中間元素要大,證明這個元素只可能在後半部分區間,我們就只需要去到後半部分區間用類似的方法再次查詢 如果比中間元素要小,則需要去到前半部分區間用類似的方...
二分查詢 Binary Search
打算重返c c 陣營,所以準備從演算法開始溫習,今天我們談到的是一種效率較高的查詢方法 二分查詢。什麼是二分查詢 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 線性表是有序表,即表中結點按關鍵字有序,並且要用向量作為表的儲存結構。二分查詢的基本思想是 1 首先確定該區間的中點位置 ...