二分查詢也稱折半查詢(binary search),它是一種效率較高的查詢方法。
演算法思路:假設目標值在閉區間[l, r]中, 每次將區間長度縮小一半,當l = r時,我們就找到了目標值。
模板一當區間[l, r]的更新操作是r = mid; l = mid + 1;時,計算mid時不需要加1。
int bsearch_1(int l, int r)
return l;
}
以上二分模板用來解,最大值最小問題。
模板二當區間[l, r]的更新操作是r = mid - 1; l = mid;時,計算mid時需要加1。
int bsearch_2(int l, int r)
return l;
}
以上二分模板用來解,最小值最大問題。
一般寫二分的思考順序是這樣的:首先通過題目背景和check(mid)函式的邏輯,判斷答案落在左半區間還是右半區間。
左右半區間的劃分方式一共有兩種:
1、中點mid屬於左半區間,則左半區間是[l, mid],右半區間是[mid+1, r],更新方式是r = mid;或者 l = mid + 1;,此時用第乙個模板;
2、中點mid屬於右半區間,則左半區間是[l, mid-1],右半區間是[mid, r],更新方式是r = mid - 1;或者 l = mid;,此時用第二個模板;
模板一:h指數ⅱ
模板二:sqrt(x)
二分查詢模板
例如陣列中查詢乙個數 二分查詢的前提是整個陣列是有序的 模板 int a n int l 0,r n 1 int mid,key while l r 另外還有一些二分查詢函式 a.函式模板 binary search arr,arr size indx c.函式功能 在陣列中以二分法檢索的方式查詢,...
二分查詢模板
二分查詢模板總共有兩個 將區間分為 l,mid l,mid l,mid mid 1,r mid 1,r mid 1 r 時,如下 while l r else 將區間分為 l,mid 1 l,mid 1 l,mid 1 mi d,r mid,r mid,r 時,如下 while l r else 對...
模板 二分查詢
題目描述 給定乙個包含n個整數的數列和包含m個不重複整數的數列。輸出既包含於也包含於的整數的個數k。輸入格式 輸入共4行 第1行僅包含乙個正整數n 第2行包含n個整數ai,數字之間用乙個空格分隔 第3行僅包含乙個正整數m 第4行包含m個整數bi,數字之間用乙個空格分隔。輸出格式 輸出僅包含乙個整數k...