查找一个元素在有序数组的范围
查找一个元素在有序数组的范围,就是查找一个元素在有序数组最左边出现的下标和最右边出现的下标,因此我们定义两个查找函数,具体实现如下:
1 //这里填你的代码^^ 2 //注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~ 3 //一个查找最左侧,一个查找最右侧 4 #include<iostream> 5 using namespace std; 6 int Search_left(int *q,int l,int r,int tar) 7 { 8 while(l<r) 9 { 10 int mid=(l+r)>>1; 11 if(tar<=q[mid]) 12 r=mid; 13 else 14 l=mid+1; 15 } 16 if(q[l]==tar) 17 return l; 18 else 19 return -1; 20 } 21 int Search_right(int *q,int l,int r,int tar) 22 { 23 while(l<r) 24 { 25 int mid=(l+r)%2==0?(l+r)/2:(l+r)/2+1; 26 if(tar<q[mid]) 27 r=mid-1; 28 else 29 l=mid; 30 } 31 //l==r仅有一个值时要进行判断 32 if(q[l]==tar) 33 return l; 34 else 35 return -1; 36 } 37 int main() 38 { 39 int n,q; 40 cin>>n>>q; 41 int *nums=new int[n]; 42 int *tars=new int[q]; 43 for(int i=0;i<n;i++) 44 { 45 cin>>nums[i]; 46 } 47 for(int i=0;i<q;i++) 48 { 49 cin>>tars[i]; 50 } 51 for(int i=0;i<q;i++) 52 { 53 cout<<Search_left(nums,0,n-1,tars[i])<<" "<<Search_right(nums,0,n-1,tars[i])<<endl; 54 } 55 //system("pause"); 56 return 0; 57 }