給定乙個包含 n 個整數的排序陣列,找出給定目標值 target 的起始和結束位置。
如果目標值不在陣列中,則返回[-1, -1]
1、直接遍歷陣列,複雜度o(n)
2、二分查詢
先通過二分查詢,找到target出現的最左邊的位置,如果不存在,返回-1;
再通過二分查詢,找到target出現的最右邊的位置,如果不存在,返回-1;
#include#includeusing
namespace
std;
int searchleft(const vector &a,int left,int right,int
target)
else
if(a[mid]first=mid+1
;
else
last=mid-1
; }
return
mid;
}int searchright(const vector &a,int left,int right,int
target)
else
if(a[mid]first=mid+1
;
else
last=mid-1
; }
return
mid;
}void searchrange(const vector &a,int left,int right,int target,int &start,int &end)
intmain()
return0;
}
二分查詢搜尋演算法
二分查詢能解決從給定的一組有順序的數中查詢出某乙個數這類問題。它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。left 為序列開始 mid 為序列中間 right 為序列結束位置 value 為查詢的關鍵字 預設序列為公升序 思路就是先將序列中...
Java 二分搜尋 二分查詢
對陣列元素進行逐個查詢顯然是費時費力的工作,我們可以使用一些方法快速地搜尋出陣列中元素的指定位置.接下來我們介紹一種方法 二分搜尋法 二分搜尋法充分利用了元素間的次序關係.基本思想 將n元素分成個數大致相同的涼拌,取arr n 2 與欲查詢的x做比較,如果 下面將採用兩種方式 遞迴 非遞迴 來展示二...
二分查詢區間總結
筆者本以為二分查詢非常簡單,掌握一種會用不就差不多了,並不知道區間還分那麼多種,現在總結一下。比較一下其中的不同之處。為了更詳細乙個 閉區間 l,r int binary search int a,int size,int p else 左閉右開 l,r int binary search int ...