二分查詢 目標值的最小下標和目標值的最大下標

2021-10-19 11:56:20 字數 1008 閱讀 7303

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 假如是乙個山脈陣列的話,需要滿足如下條件 首先,...