關於二分查詢

2021-10-03 16:13:49 字數 1118 閱讀 2978

luogu 1571 眼紅的medusa

二分模版題

#include

using namespace std;

int n,m,x,l,r,mid,cnt,a[

110000

],b[

110000

],c[

110000];

intmain()

if(x==b[l]

)cnt++

,c[cnt]

=x;}

for(

int i=

1;i)cout<<<

" ";

if(cnt!=

0)cout<

}

對於第二個序列進行快排,然後對於第乙個序列的每個值從第二個區間整段進行二分查詢操作,這種二分策略,l所代表的數一定<=x,r所代表的數一定》x,兩邊不斷逼進,直到肩並肩,此時l+1==r,那麼達到最終狀態,那麼此時l和r是<=x與》x的相鄰狀態,所以只有l才有相等可能,檢視a[l]是否等於x即可。

注意這個方法由於時刻要保證a[l]<=x,a[r]>x,那麼初始可以人為加兩個不存在的點,即a[0]=-oo,a[n+1]=oo,這樣可以保證1-n中間的任何乙個值都會被掃到。

關於另外一種二分查詢:

標準的二分查詢,序列中找某個數,在有序的序列中找target這個數

int

binarysearch

(int

nums,

int target)

return-1

;}

在區間0到nums.length-1尋找目標值。

分析的話,首先如果能找到的話那麼必定返回那個值的位置,否則就是找不到的情況。

此時整個序列左邊就是小於target的情況,右邊一段就全是大於target的情況,那麼l和r不斷進行調整,他們的調整走位方式是對稱的,結束的時候他們必定互相穿越。

位置最後變成r在l左邊,r為小於的情況,l為大於的情況,如果全是大於的情況,那麼l=0,r=-1,如果全是小於的情況,那麼r=nums.length-1,l=nums.length。

傳聞百分之九十的程式設計師都無法寫出正確的二分查詢,確實細節比較多。

關於二分查詢

面試過很多人,對於初級程式設計師來說,我一般會給他簡單的已經比較成熟的演算法來考察他,一來來他對既有演算法的熟悉度,二來考察他對於一般程式設計問題的邏輯思維能力,二分查詢是有序數列中查詢的常用演算法,也是比較容易實現的查詢演算法之一,這個是stl的實現 template randomaccessit...

關於二分查詢

在電腦科學中,二分搜尋 英語 binary search 也稱折半搜尋 英語 half interval search 1 對數搜尋 英語 logarithmic search 2 是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過...

關於二分查詢

一 關於二分查詢 1.查詢目標值 當right nums.size 1時,判定條件應該為left right right賦值時也應該是mid 1 當right nums.size 時,判定條件應該為left 目標值的數 int search vector nums,int target return...