對於已經有序的遞增序列,可以通過二分法查詢某個數字。題目經過了一些變化,將某個遞增序列迴圈移動未知次數之後,再次查詢序列中是否存在某個數字,同樣可以用二分法來做。
例如序列:,經過迴圈移動後變成,現在我們想要查詢的數字 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 查詢不成功時,返回應該插入的位置...