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

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

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 }

 


__EOF__

本文作者不太聪明的小高
本文链接https://www.cnblogs.com/daviselppa/p/16448538.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   不太聪明的小高  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示