(欢迎阅读我的博客,如发现错误或有建议请评论留言,谢谢。)
题目要求:
Description
Input
Output
Sample Input
5 1 3 5 7 9 3 1 5 8
Sample Output
1 3 -1
题目思路:
一看题目思路就很明确了用二分查找,题目限制600MS,用for直接找肯定超时了。
细节处理:
在写程序的时候我遇到一个问题,一开始用C++写的程序用了二分也是超时,后来在贴吧上看到了有个人也是用C++写完后超时,但是改为C以后就A了,搜索了一下发现C与C++之间的效率是有略微差别的。
下面这个网址中就有对二者效率的说明http://bbs.****.net/topics/390326288?locationNum=6&fps=1
代码如下:
#include<stdio.h>
int main()
{
int n,i,q,s,a[3000000],k,m,x;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&q);
while(q--)
{ k=0;
scanf("%d",&x);
m=n-1;
int w=1;
while(k<=m)
{
s=(k+m)/2;
if(x==a[s])
{
w=0;break;
}
else if(x<a[s])
{
m=s-1;
}
else k=s+1;
}
if(w==0)
printf("%d\n",s+1);
else printf("-1\n");
}
}