查找数字所在的位置
2022/4/23 23:12:37
本文主要是介绍查找数字所在的位置,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
又是被迫营业。
这道题目很简单但我错了
二分模板题.
1 int l = -1,r =N; 2 while(l+1!=r) 3 { 4 m=(l+r)>>1; 5 if(check(m)) l=m; 6 else r=m; 7 } 8 return l or r;
这个模板有几亿个细节值得注意:
1.l 与 r的初值在有效区间外,为了防止整个区间都满足或都不满足 check 函数
2.L = m,r = m。这里经常有人写成l=m+1或r=m-1 但这里为了不会产生边界问题与容易记忆就写成L=m,r=m。
3.l 表示check函数满足的边界,如都不满足check函数就为-1,r表示不满足check函数的边界,如都满足check函数就为n。
程序:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,a[1000000+10]={0}; 4 int main() 5 { 6 scanf("%d%d",&n,&m); 7 for(int i=1;i<=n;i++) 8 { 9 scanf("%d",&a[i]); 10 } 11 while(m--) 12 { 13 int k; 14 scanf("%d",&k); 15 int r=n+1,l=0; 16 while(l+1!=r) 17 { 18 int mid=(l+r)/2; 19 if(a[mid]>=k) 20 { 21 r=mid; 22 } 23 else if(a[mid]<k) 24 { 25 l=mid; 26 } 27 } 28 if(a[r]==k) printf("%d\n",r-1); 29 else printf("%d\n",-1); 30 } 31 return 0; 32 }
这篇关于查找数字所在的位置的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南