数据结构上机实验之二分查找(哈希优化)

来源:互联网 发布:钢结构楼梯踏步计算法 编辑:程序博客网 时间:2024/06/05 11:23

题目描述

 在一个递增的序列里,查找元素是否存在,若存在输出YES,不存在输出NO.

输入

 本题多组数据,首先输入一个数字n,然后输入n个数,数据保证数列递增,然后再输入一个查找数字。

输出

 若存在输出YES,不存在输出NO.

示例输入

41 3 5 83

示例输出

YES

提示

#include<iostream>//用哈希方法  优化#include<stdio.h>#include<string.h>using namespace std;int n;int a[100000];int main(){  int x,y;    while(~scanf("%d",&n))    {       memset(a,0,sizeof(a));//一定要初始化否则会Time Limit Exceeded    for(int i=0;i<n;i++)    {        scanf("%d",&x);        a[x]=1;    }    scanf("%d",&y);    if(a[y]==1)        printf("YES\n");    else        printf("NO\n");        }        return 0;}

传统方法
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int a[1000000];int b;int fen(int p,int q,int key){    int low=p,high=q,mid;    while(low<=high)//是<=万万不可少=    {        mid=(low+high)/2;        if(a[mid]==key)            return 1;        if(a[mid]<key)            return fen(mid+1,q,key);        if(a[mid]>key)            return fen(p,mid-1,key);    }    return -1;}int main(){    int n,y;    while(~scanf("%d",&n))    {        for(int i=0; i<n; i++)        {            scanf("%d",&a[i]);        }        scanf("%d",&b);        y=fen(0,n-1,b);        if(y==1)            printf("YES\n");        else if(y==-1)            printf("NO\n");    }    return 0;}

stl方法
#include <iostream>#include <algorithm>using namespace std;int a[10000000];int main(){     int n,x;     while(cin>>n){        for(int i=0;i<n;i++)            cin>>a[i];        cin>>x;        if(binary_search(a,a+n,x))            cout<<"YES"<<endl;        else            cout<<"NO"<<endl;     }     return 0;}


 

来源

 cz

示例程序

 
0 0
原创粉丝点击