二分擴充套件(遞增陣列迴圈移動後查詢某數字)

2021-08-19 05:25:06 字數 620 閱讀 9164

對於已經有序的遞增序列,可以通過二分法查詢某個數字。題目經過了一些變化,將某個遞增序列迴圈移動未知次數之後,再次查詢序列中是否存在某個數字,同樣可以用二分法來做。

例如序列:,經過迴圈移動後變成,現在我們想要查詢的數字 x=10。序列變成了兩個部分,一部分遞增,出現乙個斷層之後再次遞增。在每次二分過程中,會把整個區間劃分為兩個子區間,其中乙個為單純的遞增序列,另乙個同樣為單純遞增序列或者為更小的迴圈序列。所以我們需要借助le mid ri 三個位置元素的大小關係,來確定子區間的性質。通過比較x和子區間範圍的大小,來逐步找到目標數字。

#include #include #include using namespace std;

int a[100];

int main()

else

}else // [mid,ri]區間單調遞增

else}}

printf("%d\n",ans);

}return 0;}/*

10 1

6 7 8 10 12 14 1 2 3 4

6 10

6 10 1 2 3 4

6 10

1 2 3 4 5 10

*/

二分搜尋及其擴充套件(迴圈遞增陣列的搜尋)

二分搜尋需要注意開閉區間的問題,限制條件和邊界要保持配對 low high low mid 1 high mid 1。二分搜尋的模板如下 cpp view plain copy 二分搜尋 intbinarysearch int num,intkey,intlow,inthigh return low...

二分搜尋及其擴充套件(迴圈遞增陣列的搜尋)

二分搜尋需要注意開閉區間的問題,限制條件和邊界要保持配對 low high low mid 1 high mid 1。二分搜尋的模板如下 二分搜尋 int binarysearch int num,int key,int low,int high return low 查詢不成功時,返回應該插入的位...

二分搜尋及其擴充套件(迴圈遞增陣列的搜尋)

二分搜尋需要注意開閉區間的問題,限制條件和邊界要保持配對 low high low mid 1 high mid 1。二分搜尋的模板如下 二分搜尋 intbinarysearch int num,int key,int low,int high return low 查詢不成功時,返回應該插入的位置...