二分搜尋演算法

2021-10-24 19:40:16 字數 1177 閱讀 6201

一段區間,劃分為兩段

左區間       右區間

首先 設定 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...