SDUT 3376 数据结构实验之查找四:二分查找
数据结构实验之查找四:二分查找
Time Limit: 20MS Memory Limit: 65536KB
Problem Description
在一个给定的无重复元素的递增序列里,查找与给定关键字相同的元素,若存在则输出找到的位置,不存在输出-1。
Input
一组输入数据,输入数据第一行首先输入两个正整数n ( n < = 10^6 )和m ( m < = 10^4 ),n是数组中数据元素个数,随后连续输入n个正整数,输入的数据保证数列递增。
随后m行输入m个待查找的关键字key
Output
若在给定的序列中能够找到与关键字key相等的元素,则输出位序(序号从0开始),否则输出-1。
Example Input
8 3 4 6 8 9 13 20 21 22 6 8 17
Example Output
1 2 -1
DQE:
偶尔超时,除以二的地方改成位运算就没再超时了233
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 int main() 6 { 7 int f[1000010]; 8 int n,m,k,i; 9 while(scanf("%d %d",&n,&m)!=EOF) 10 { 11 for(i=0;i<n;i++) 12 scanf("%d",f+i); 13 while(m--) 14 { 15 bool flag=true; 16 scanf("%d",&k); 17 int l=0,r=n-1; 18 while(l<=r) 19 { 20 int ll=(l+r)>>1;//二进制右移1位,等价于除以二,比/2效率更高 21 if(f[ll]==k) 22 { 23 printf("%d\n",ll); 24 flag=false; 25 break; 26 } 27 else if(f[ll]>k) 28 { 29 r=ll-1; 30 } 31 else 32 l=ll+1; 33 } 34 if(flag) 35 printf("-1\n"); 36 } 37 } 38 return 0; 39 } 40 41 /*************************************************** 42 User name: *** 43 Result: Accepted 44 Take time: 24ms 45 Take Memory: 544KB 46 Submit time: 2016-11-29 17:29:07 47 ****************************************************/
本文来自:[ https://www.cnblogs.com/Leroscox ]
博主:[ MiK ]
——
非商业转载请附原文链接!
商业转载请获得博主许可!