其他分享
首页 > 其他分享> > 查找数字所在的位置

查找数字所在的位置

作者:互联网

 

 又是被迫营业。

这道题目很简单但我错了

二分模板题.

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 }

 

标签:数字,int,所在,mid,else,满足,查找,check,函数
来源: https://www.cnblogs.com/wjk53233/p/16183832.html