前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单查找

简单查找

作者头像
Java架构师必看
发布2021-05-14 10:30:35
2150
发布2021-05-14 10:30:35
举报
文章被收录于专栏:Java架构师必看

问题 I: 简单查找

时间限制: 3 Sec  内存限制: 22 MB 提交: 688  解决: 123

题目描述

给定一个集合,查找元素是否在集合中出现。

输入

每个测试用例由多行组成,第一行是两个整数n和m,这2个数的取值在1到3 000 000之间。

自第二行起一共有n+m个整数,其中前面n个整数代表集合的元素,随后的m个整数是待查询的数。n+m个整数的取值在范围1到10 000 000之间。

输出

对于每个待查询的数,如果在集合中则输出yes,否则输出no.

样例输入

代码语言:javascript
复制
5 345 56 23 6 56633 66 63 22934 235 555555 230 0

样例输出

代码语言:javascript
复制
no
代码语言:javascript
复制
no
代码语言:javascript
复制
yes
代码语言:javascript
复制
yes
代码语言:javascript
复制
no
代码语言:javascript
复制
思路:快排+二分查找。
代码语言:javascript
复制
代码语言:javascript
复制
#include<stdio.h>  
#include<algorithm>  
using namespace std;  
int a[3333333];  
int main()  
{  
    int n,m,b;  
    while(scanf("%d%d",&n,&m)!=EOF)  
    {  
        if(m==0&&n==0)  
            return 0;  
        int i,j;  
        for(i=0;i<n;i++)  
            scanf("%d",&a[i]);  
        sort(a,a+n);  
        int flag=0;  
        for(j=0;j<m;j++)  
        {  
            flag=0;  
            scanf("%d",&b);   
            int left=0,right=n-1,mid;  
            while(left<=right)  
            {  
                mid=(left+right)/2;  
                if(b==a[mid])  
                {  
                    printf("yes\n");  
                    flag=1;  
                    break;  
                }  
                if(b>a[mid])  
                    left=mid+1;  
                else
                    right=mid-1;  
            }  
            if(flag==0)  
                printf("no\n");  
        }  
    }  
    return 0;  
}
 
yes
no
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 输入
  • 输出
  • 样例输入
  • 样例输出
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档