1.我們使用的退出迴圈的條件為l<=r
2.找到目標值的最小下標,將大於和等於合併成為一種情況:a[mid]>=target,答案的下標存在與l (如果只有乙個target值的話,l存的就是唯一target值的下標)
3.找到目標值的最大下標,將小於和等於合併成為一種情況:a[mid]<=target,答案的下標存在與r (如果只有乙個target值的話,r存的就是唯一target值的下標)
binarysearch_get_left 和 binarysearch_get_right 下標l和r的含義:
1.下標l為比target大的最小下標值
2.下標r為比target小的最大下標值
3.要注意的點就是l,r是有可能越界的
value: 1 1 2 2 4 4
index: 0 1 2 3 4 5
target=3
兩個二分查詢得到的l=4,r=3(r,l對應的都是下標)
具體看**實現:
#include #includeusing namespace std;
int binarysearch_get_left(int a,int l,int r,int target)
if(l<=right&&a[l]==target)
return l;
else return -1;
}int binarysearch_get_right(int a,int l,int r,int target)
if(r>=left&&a[r]==target)
return r;
else return -1;
}int main() ;
for(int i=0;i<4;i++)
return 0;
}
執行的結果截圖:
1095 山脈陣列中查詢目標值 二分搜尋
描述 這是乙個 互動式問題 給你乙個 山脈陣列 mountainarr,請你返回能夠使得 mountainarr.get index 等於 target 最小 的下標 index 值。如果不存在這樣的下標 index,就請返回 1。何為山脈陣列?如果陣列 a 是乙個山脈陣列的話,那它滿足如下條件 首...
子集和的目標值
題目描述 給定n個整數和目標值t,求某一非空子集使子集的元素的和與目標值之差的絕對值最小,元素可重複。輸入描述 第一行為整數n t。n為整數個數,t為目標值 第二行為n個整數ai。輸出描述 乙個整數,為差的最小值的絕對值。樣例輸入 5 91 1 1 4 17 樣例輸出 2 資料範圍及提示 1 n 1...
1095 山脈陣列中查詢目標值 三分 二分
這是乙個 互動式問題 給你乙個 山脈陣列 mountainarr,請你返回能夠使得 mountainarr.get index 等於 target 最小 的下標 index 值。如果不存在這樣的下標 index,就請返回 1。所謂山脈陣列,即陣列 a 假如是乙個山脈陣列的話,需要滿足如下條件 首先,...