我正在製作二進制搜索程序,以查找範圍內左值和右值之間的元素數量。二進制搜索範圍
我的代碼是:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> arr(20);
int search(int value,int low,int high)
{
if (high <= low)
return low;
int mid = (low + high)/2;
if (arr[mid] > value)
return search(value,low,mid-1);
else
return search(value,mid+1,high);
}
int main(){
int n;
cin>>n;
//ENTER SORTED ARRAY
for(int i=0;i<n;i++){
cin>>arr[i];
}
int left;
cin>>left;
//RIGHT IS GREATER OR EQUAL TO LEFT
int right;
cin>>right;
cout<<search(right,0,n-1)-search(left,0,n-1)+1<<"\n";
}
它給正確的答案一定範圍內。
但是對於一些給出錯誤的情況,如果N = 6且數組爲[1 3 5 8 10 13]並且說範圍爲[5,9],那麼它給出1作爲答案,但它應該爲2爲5和8兩者都在範圍內。
這可能會或可能不會涉及到你的問題,但我很好奇,你會想這個算法給您例如用'n ==可0'設置什麼答案?看起來你的算法不能給出區分範圍中的1個元素和範圍中的任何元素的答案。 –
@MichaelBurr我假設左右都是我的數組範圍 – user3405426
http://coliru.stacked-crooked.com/a/c2e49c838d017ace –