欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

牛客网 查找(二分查找)

程序员文章站 2024-03-17 15:05:04
...

题目描述

输入数组长度 n 输入数组 a[1…n] 输入查找个数m 输入查找数字b[1…m] 输出 YES or NO 查找有则YES 否则NO 。
输入描述:
输入有多组数据。
每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m,n<=100)。

输出描述

如果在n个数组中输出YES否则输出NO。
示例1

输入

5
1 5 2 4 3
3
2 5 6

输出

YES
YES
NO

Solution

二分查找板题。

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 1111;
int num[maxn];
int low_bound(int first, int last, int value)
{
    while (first < last)
    {
        int mid = first + (last - first) / 2; // 防溢出
        if (value > num[mid])
            first = mid + 1;
        else
            last = mid;
    }
    return first;
}
int main()
{
    // freopen("in.txt", "r", stdin);
    int n, m;
    while (~scanf("%d", &n))
    {
        for (int i = 0; i < n; i++)
            scanf("%d", &num[i]);
        sort(num, num + n);
        scanf("%d", &m);
        for (int i = 0; i < m; i++)
        {
            int value;
            scanf("%d", &value);
            int index = low_bound(0, n, value);
            if (value == num[index])
                puts("YES");
            else
                puts("NO");
        }
    }
    return 0;
}