早教吧作业答案频道 -->其他-->
代码问题!在一个升序排列的整数数字序列中查找,并返回相应的查找结果。输入每个测试用例由多行组成,第一行是两个整数n和m,其中,1
题目详情
代码问题!
在一个升序排列的整数数字序列中查找,并返回相应的查找结果。
输入
每个测试用例由多行组成,第一行是两个整数n和m,其中,1<=n,m<=1000000。
自第二行起一共有n+m个整数,其中前面n个整数代表升序排列的有序序列,随后的m个整数是待查询的数。n+m个整数的取值在范围1到10^12(10的12次方)之间。
输出
对于每个待查询的数,如果在有序序列中则输出"yes",否则输出"no",每行输出一个查询结果。
样例输入
5 3
6 23 45 56 586
33 66 6
样例输出
no
no
yes
该怎么写,要优化下下
在一个升序排列的整数数字序列中查找,并返回相应的查找结果。
输入
每个测试用例由多行组成,第一行是两个整数n和m,其中,1<=n,m<=1000000。
自第二行起一共有n+m个整数,其中前面n个整数代表升序排列的有序序列,随后的m个整数是待查询的数。n+m个整数的取值在范围1到10^12(10的12次方)之间。
输出
对于每个待查询的数,如果在有序序列中则输出"yes",否则输出"no",每行输出一个查询结果。
样例输入
5 3
6 23 45 56 586
33 66 6
样例输出
no
no
yes
该怎么写,要优化下下
▼优质解答
答案和解析
//hipi亲自测试通过,供参考。时间优化已经做到。
//输入 0 0 退出
#include<stdio.h>
#include<algorithm>
using namespace std;
long a[100],b[1000001],num;
int main()
{
int n,m,i,j,left,right,mid,flag;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(!n&&!m) break;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=m;i++)
scanf("%d",&b[i]);
for(i=0;i<m;i++)
{
num=b[i+1];
left=1;right=n;
flag=0;mid=0;
while(left<=right)
{
mid=(right+left)/2;
if(a[mid]>num) right=mid-1;
else if(a[mid]<num) left=mid+1;
else if(a[mid]==num) {flag=1;break;}
}
if(flag)
printf("yes\n");
else printf("no\n");
}
}
return 0;
}
看了代码问题!在一个升序排列的整数...的网友还看了以下:
如何找出两列相同的数据并排序,然后其他后面各个列也跟着排序.但顺序不乱.比如:A列B列C列D列小成小 2020-03-30 …
观察下面的一列数:1/2,-2/3,1/4,-4/5,1/6,-6/7,--- 请你找出其中排列的 2020-05-16 …
随即产生10个两位数的正整数,找其中的奇数和偶数的个数,并将其排序输出 2020-06-06 …
数据结构题索引顺序表上的查找分两个阶段:(1)是——(2)是——设表中的元素的初始状态是按键值递增 2020-06-28 …
一架客机的经济舱有52排座位,每排座位有7个,被两条过道分开,在过道的两边各有各有2个座位,中间有 2020-07-04 …
一个排列组合问题我准备和爷爷坐飞机出行飞机是是a330-200是八排坐的其中两边靠窗各两排过道中间 2020-07-09 …
7名同学站成两排照相1.其中前排站3人,后排站4人,有多少种排法2.其中前排站3名女生,后排站4名 2020-07-14 …
excel表中有N列数据,其中A、B两列有相同项。如何找出两列中的相同项,并相对应的排列。且A列顺序 2020-11-01 …
有两个三口之家一起出行去旅游,他们被安排坐在两排相对的座位上,其中一排有3个座位,另一排有4个座位. 2020-12-15 …
找规律填数字0122233544423555716第一行的0在1和2中间的上方那里后面的插空儿!原来 2021-02-01 …