查找一个元素在有序数组的范围

查找一个元素在有序数组的范围,就是查找一个元素在有序数组最左边出现的下标和最右边出现的下标,因此我们定义两个查找函数,具体实现如下:

 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 }

 

posted @ 2022-07-05 20:30  不太聪明的小高  阅读(101)  评论(0)    收藏  举报