一段區間,劃分為兩段
左區間 右區間
首先 設定 l=0,r = arr.length -1 設定兩端的指標
int mid = l+r >>1;
check(mid)
然後!!這個地方 mid 需要+1,不然會死迴圈,int mid = l+r+1>>1
如果為true,則答案 在 [mid,r]; 替換 [l,r] ==> l = mid
false, 則答案 在 [l , mid),[l,mid-1]
模板二:就是 int mid = l+r >>1;
check(mid)
true, 如果是右區間的端點,則 r = mid 答案就在 [l,mid], 這個地方,包含 mid ,替代[ l , r]
false 則 在左邊區間 , l = mid +1 答案在 mid+1 , r,
789. 數的範圍
給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。
對於每個查詢,返回乙個元素k的起始位置和終止位置(位置從0開始計數)。
如果陣列中不存在該元素,則返回「-1 -1」。
輸入格式
第一行包含整數n和q,表示陣列長度和詢問個數。
第二行包含n個整數(均在1~10000範圍內),表示完整陣列。
接下來q行,每行包含乙個整數k,表示乙個詢問元素。
輸出格式
共q行,每行包含兩個整數,表示所求元素的起始位置和終止位置。
如果陣列中不存在該元素,則返回「-1 -1」。
資料範圍
1≤n
≤100000
1≤n≤100000
1≤q
≤10000
1≤q≤10000
1≤k
≤10000
1≤k≤10000
輸入樣例:6 3
1 2 2 3 3 434
5
輸出樣例:3 4
5 5-1 -1
二分搜尋演算法
今天我勉強搞懂了二分查詢演算法,我覺得很有收穫,這是個不錯的演算法,希望還不知道 不懂二分演算法的朋友能看看!二分查詢 二分查詢的前提是陣列一定是有序的 傳入乙個陣列 t 傳入乙個查詢元素 t key 返回查詢結果 class myutil else if key.compareto x mid 0...
二分搜尋演算法
在電腦科學中,二分搜尋 英語 binary search 也稱折半搜尋 英語 half interval search 對數搜尋 英語 logarithmic search 是一 種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束...
二分搜尋演算法
1.x y 2與x y x 2區別 運算子 取整朝零方向取整,5 2 2,5 2 2 用x y x 2好處是確保分界點總是靠近區間起點 2.基本二分查詢的實現方法 int bsearch int a,int x,int y,int v return 1 3.設lower bound和upper bo...