SDUT 3376 数据结构实验之查找四:二分查找
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:
使用while循环实现二分查找,本题数据量略大,算法时间临界,服务器压力较大时可能出现TLE,未优化算法。
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 int main() 7 { 8 int f[1000010]; 9 int n,m,k,i; 10 while(scanf("%d %d",&n,&m)!=EOF) 11 { 12 for(i=0;i<n;i++) 13 scanf("%d",f+i); 14 while(m--) 15 { 16 bool flag=true; 17 scanf("%d",&k); 18 int l=0,r=n-1; 19 while(l<=r) 20 { 21 int ll=(l+r)/2; 22 if(f[ll]==k) 23 { 24 printf("%d\n",ll); 25 flag=false; 26 break; 27 } 28 else if(f[ll]>k) 29 { 30 r=ll-1; 31 } 32 else 33 l=ll+1; 34 } 35 if(flag) 36 printf("-1\n"); 37 } 38 } 39 return 0; 40 } 41 42 /*************************************************** 43 User name: *** 44 Result: Accepted 45 Take time: 28ms 46 Take Memory: 544KB 47 Submit time: 2016-11-10 22:55:11 48 ****************************************************/
以上是关于SDUT 3376 数据结构实验之查找四:二分查找的主要内容,如果未能解决你的问题,请参考以下文章