幾個二分查詢的變形

2021-08-21 06:00:30 字數 730 閱讀 6224

二分查詢其實是很難的問題,主要是邊界問題難以解決,下面就我自己的理解說一說,我們應該如何進行思考。

二分法主要面向兩類問題,

一類是無重複元素的按公升序排序的陣列

另一類是面向有重複元素的陣列。

而每一類都必須面臨兩個難點,對應如下

1:如何將問題的規模減小,因為二分就是分治的應用,我們必須要保證問題在逐步減小,不會出現死迴圈的情況。

2:while迴圈終止的條件,是選用low好,下面來結合這兩個難點,我們想一下如何解決如下幾個問題

這個問題肯定是沒有重複元素的問題,先上一段**

int binary(int key,vectornums)

else if(nums[mid]key)

} return -1;

}

對於問題一:我們可以知道,上面對應的是三段式,當它等於的時候,就直接return這個下標,然後沒找到的話,就需要進行丟棄一半的元素,例如key>nums[mid],那麼就會丟棄掉原來的low到mid之間的所有元素,總的丟掉的是mid-low+1個元素,這是大於1的,而另外一種情況,key那麼很自然上乙個的mid也等於low=high,那麼這個時候,我們想,那麼上一步的high不就沒有判斷嗎?因為我們判斷的時候就是[low,high],左閉右閉,最後一步,mid=low,此時high決對是沒有判斷的,下一步就會退出,那麼就會誤判。好了這個問題就到此結束

2:有重複元素的陣列,求key的最左邊的那個值的下標,

變形二分查詢

title 資料結構與演算法 專案 主題 二分查詢 description 分析 1 查詢的是乙個有序的資料集合 2 每次查詢都是與區間的中間元素進行對比,將待查詢的區間縮小為之前的一半,直到找到要查詢的元素,或者區間被縮小為0 date 2021 version 0.1版本 author coff...

二分查詢及其變形

一 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。方法一 o n public int minnumberinrota...

二分查詢及其變形

最基本的二分查詢模版 在有序陣列a中查詢key,如果找到,返回位置索引,否則,返回 1 int binarysearch int a,int n,int key else if a mid key else return 1 變種1 如果a有多個key元素,返回最大的,否則,返回 1 int bin...