zoukankan      html  css  js  c++  java
  • 二分查找模板

    题目相关
    题目链接
    计蒜客,https://nanti.jisuanke.com/t/T1560。

    题目描述
    蒜头君手上有个长度为 n 的数组 A。由于数组实在太大了,所以蒜头君也不知道数组里面有什么数字,所以蒜头君会经常询问整数 x 是否在数组 A 中。

    输入格式
    第一行输入两个整数 n 和 m,分别表示数组的长度和查询的次数。

    接下来一行有 n 个整数 ai​。

    接下来 m 行,每行有 1 个整数 x,表示蒜头君询问的整数。

    输出格式
    对于每次查询,如果可以找到,输出"YES",否则输出"NO"。

    样例输入
    10 5
    1 1 1 2 3 5 5 7 8 9
    0
    1
    4
    9
    10
    样例输出
    NO
    YES
    NO
    YES
    NO
    数据范围
    1 ≤ n, m ≤10^5, 0 ≤ x ≤ 10^6。
    分析
    标准的二分查找模板。

    题目要求
    输入一个 x,在数组 A 中找到,输出"YES",否则输出"NO"。

    编程思路
    1、读入数组 A。

    2、对 A 进行排序。

    3、读入一个 x,在数组 a 二分查找 x 是否存在。

    AC 参考代码

    STL 版本

    利用 algorith 库中 binary_search 函数。

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int n,m;
    	cin>>n>>m;
    	int a[n];
    	for(int i=0;i<n;i++) cin>>a[i];
    	sort(a,a+n);
    	for(int i=0;i<m;i++)
    	{
    		int x;
    		cin>>x;
    		if(binary_search(a,a+n,x))//万能的库函数 
    		{
    			cout<<"YES
    ";
    		}
    		else cout<<"NO
    ";
    	}
    	return 0;
    }
    

      

    C++ 版本

    自己实现一个类似 STL 的 binary_search 函数。

    #include<bits/stdc++.h>
    using namespace std;
    int binary_search(int a[],int left,int right,int x)
    {
        while(left<=right)
        {
            int mid=(left+right)/2;
            if(x==a[mid]) return mid;
            else if(x<a[mid]) right=mid-1;
            else left=mid+1;
        }
        return -1;
    } 
    int main()
    {
        int n,m;
        cin>>n>>m;
        int a[n];
        for(int i=0;i<n;i++) cin>>a[i];
        sort(a,a+n);
        for(int i=0;i<m;i++)
        {
            int x;
            cin>>x;
            if(-1==binary_search(a,0,n-1,x)) cout<<"NO
    ";
            else cout<<"YES
    ";
        }
        return 0;
    }

    参考链接:

    https://blog.csdn.net/justidle/article/details/104600447

  • 相关阅读:
    ioS开发之CoreLocation(GPS定位)
    iOSiOS开发之退出功能(易错)
    iOS开发之判断横竖屏切换
    iOS开发之左右抖动效果
    iOS开发之UIPopoverController
    thinkphp or查询
    Invalid left-hand side in assignment
    实现input表单从右向左输入
    thinkPhp不为空查询
    array_filter()用法
  • 原文地址:https://www.cnblogs.com/dragondragon/p/13379978.html
Copyright © 2011-2022 走看看