给定一个 nn 个数的数组 aa,再给定 mm 次询问,每次询问一个整数 xx 在数组 aa 中是否存在,如果存在,输出 Y,不存在输出 N。

H. 找数字
题目描述
给定一个 nn 个数的数组 aa,再给定 mm 次询问,每次询问一个整数 xx 在数组 aa 中是否存在,如果存在,输出 Y,不存在输出 N。

输入
第 11 行是一个整数 nn(5≤n≤10^55≤n≤10
5
);

第 22 行有 nn 个整数,数与数之间用空格隔开;

第 33 行有一个整数mm(5≤m≤10^55≤m≤10
5
);

第 44 行有 mm 个整数,数与数之间用空格隔开;

【以下回答由 GPT 生成】

首先,我们可以使用一个哈希集合来存储数组a中的所有元素。然后,对于每个查询元素x,我们只需要在哈希集合中查找是否存在x即可。

下面是一种可能的解决方案的代码实现:

def check_elements_exist(n, a, m, queries):
    # 创建一个空的哈希集合
    set_a = set()

    # 遍历数组a,将每个元素添加到哈希集合中
    for num in a:
        set_a.add(num)

    # 对于每个查询元素x,判断是否存在于哈希集合中
    results = []
    for query in queries:
        if query in set_a:
            results.append("Y")
        else:
            results.append("N")

    return results

# 读取输入
n = int(input())
a = list(map(int, input().split()))
m = int(input())
queries = list(map(int, input().split()))

# 调用函数进行查询
results = check_elements_exist(n, a, m, queries)

# 输出结果
for result in results:
    print(result, end=" ")

这个解决方案的时间复杂度是O(n+m),其中n是数组a的长度,m是查询的次数。

希望这个解决方案对你有帮助!如果有任何问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

输入
5
1 3 2 1 6
5
2 8 1 9 6
输出
Y N Y N Y


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